diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..18f524c --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,339 @@ +This Flexible and Interoperable Data Transfer (FIT) Protocol License Agreement +(this "Agreement") is a binding agreement between Garmin International, Inc. and +its affiliates (collectively, "Garmin") and the person or entity using the +Licensed Technology (each, a "Licensee" or "you"). As used in this Agreement, +the "Licensed Technology" means Garmin's Flexible and Interoperable Data +Transfer ("FIT") software development kit ("SDK") that includes documentation +describing the FIT protocol and related source code files. + + +PLEASE READ THIS AGREEMENT CAREFULLY BEFORE USING THE LICENSED TECHNOLOGY. BY +USING THE LICENSED TECHNOLOGY, YOU SIGNIFY YOUR AGREEMENT TO THESE TERMS AND +REPRESENT AND WARRANT THAT: (A) YOU ARE OF LEGAL AGE TO ENTER INTO THIS +AGREEMENT; AND (B), IF LICENSEE IS A CORPORATION, GOVERNMENTAL ORGANIZATION, OR +OTHER LEGAL ENTITY, YOU HAVE THE RIGHT, POWER, AND AUTHORITY TO ENTER INTO THIS +AGREEMENT ON BEHALF OF LICENSEE AND BIND LICENSEE TO ITS TERMS. IF YOU DO NOT +AGREE TO THE TERMS OF THIS AGREEMENT, GARMIN WILL NOT AND DOES NOT LICENSE THE +LICENSED TECHNOLOGY TO YOU, AND YOU MUST NOT USE THE LICENSED TECHNOLOGY AND +MUST DELETE ALL COPIES OF THE LICENSED TECHNOLOGY. + + +1. Grant and Scope. + +Subject to and conditioned upon Licensee's strict compliance with all terms and +conditions set forth in this Agreement, Garmin hereby grants to Licensee a +non-exclusive, royalty-free, non-transferable, non-sublicensable, limited +license to use the Licensed Technology for Licensee's internal business +purposes, including to use the FIT protocol in any software created by Licensee +and to create modifications of the Licensed Technology ("Modifications") subject +to the restrictions in Section 3. The Licensed Technology is licensed, not sold, +to Licensee by Garmin and Licensee does not have or obtain any ownership +interest in the Licensed Technology, or in any related intellectual property +rights. Garmin reserves all rights not expressly granted to Licensee in this +Agreement. + + +2. Use Restrictions. + +Licensee shall not, and shall not permit any third party to, directly or +indirectly: + +a. remove, delete, efface, alter, obscure, translate, combine, supplement or +otherwise change any trademarks or proprietary marks, notices, or symbols +relating to the Licensed Technology; + +b. use the Licensed Technology in any manner or for any purpose that infringes, +misappropriates, or otherwise violates any intellectual property right or other +right of any person or entity; + +c. except as set forth herein, rent, lease, lend, sell, sublicense, assign, +distribute, publish, transfer or otherwise make available the Licensed +Technology, or any features or functionality of the Licensed Technology, to any +third party for any reason; + +d. distribute the Licensed Technology or any derivatives thereof so that any +part of it becomes subject to any license that requires that the Licensed +Technology or any of Garmin's other intellectual property be disclosed or +distributed in source code form, or that others have the right to modify it; + +e. use the Licensed Technology in violation of any law, regulation or rule; + +f. use the Licensed Technology for purposes of benchmarking or a competitive +analysis of the Licensed Technology; + +g. use the Licensed Technology in or in connection with the design, +construction, maintenance, operation, or use of any hazardous environments, +systems or applications, any safety response systems or other safety-critical +applications or any other use or application in which the use or failure of the +Licensed Technology could lead to personal injury or physical or property +damage; or + +h. fail to comply with all definitions and provisions in the FIT protocol or +deviate from the standards as defined in the FIT protocol and related +documentation. + + +3. Interoperability and Compatibility. + +Licensee agrees to maintain the features within the Licensed Technology that +provide for interoperability between systems and compatibility with previous and +future release versions of the FIT protocol. Any Modifications are permissible +only if the interoperability of the FIT protocol is maintained. + + +4. Confidentiality. + +In connection with this Agreement, Garmin may disclose or make available +Confidential Information to Licensee. "Confidential Information" means +information in any form or medium (whether oral, written, electronic or other) +that: (a) if disclosed in writing or other tangible form or medium, is marked +"confidential" or "proprietary"; or (b) if disclosed orally or in another +intangible form or medium, is identified by Garmin as confidential or +proprietary when disclosed and later summarized and marked "confidential" or +"proprietary" in writing by Garmin. Without limiting the foregoing, the Licensed +Technology is Confidential Information of Garmin. + +Confidential Information does not include information that Licensee can +demonstrate by written or other documentary records: (1) was rightfully known to +Licensee without restriction on use or disclosure prior to such information +being disclosed or made available to Licensee in connection with this Agreement; +(2) was or becomes generally known by the public other than by Licensee's +noncompliance with this Agreement; (3) was or is received by Licensee on a +non-confidential basis from a third party that was not or is not under any +obligation to maintain its confidentiality; or (4) was independently developed +by Licensee without reference to or use of any Confidential Information. + +Licensee shall: (A) not access or use Confidential Information other than as +necessary to exercise its rights or perform its obligations under and in +accordance with this Agreement; (B) safeguard the Confidential Information from +unauthorized use, access or disclosure using at least the degree of care it uses +to protect its sensitive information and in no event less than a reasonable +degree of care; and (C) promptly notify Garmin of any unauthorized use or +disclosure of Confidential Information and take all reasonable steps to prevent +further unauthorized use or disclosure. If Licensee is compelled by applicable +law to disclose any Confidential Information then, to the extent permitted by +applicable law, Licensee will: (i) promptly, and prior to such disclosure, +notify Garmin in writing of such requirement so that Garmin can, at Garmin's +option, seek a protective order or other remedy or waive its rights under this +paragraph; and (ii), at Garmin's expense, provide reasonable assistance to +Garmin in opposing such disclosure or seeking a protective order or other +limitations on disclosure. Subject to the preceding sentence, Licensee will +disclose only that portion of the Confidential Information that, on the advice +of legal counsel, Licensee is legally required to disclose and, on Garmin's +request, will use commercially reasonable efforts to obtain assurances from the +applicable court or other presiding authority that such Confidential Information +will be afforded confidential treatment. + + +5. License to Feedback and Modifications. +If you provide any Feedback to Garmin or if you create any Modifications: (a) +you grant to Garmin a worldwide, non-exclusive, royalty-free, transferable, +sublicensable, perpetual and irrevocable license to use and otherwise exploit +such Feedback or Modifications in connection with any Garmin products, +applications and services; (b) Garmin shall be free to use, disclose, reproduce, +distribute and otherwise commercialize all Feedback that you provide or +Modifications you create without obligation or restriction of any kind on +account of intellectual property rights or otherwise; (c) you waive all rights +to be compensated or seek compensation for your Feedback or Modifications; and +(d) Feedback or Modifications, even if marked confidential, shall not create any +confidentiality obligations on Garmin. + + +6. No Warranties. +LICENSEE AGREES THAT THE USE OF THE LICENSED TECHNOLOGY IS PROVIDED "AS IS", +WITHOUT TECHNICAL SUPPORT FROM GARMIN AND WITH ALL FAULTS AND DEFECTS WITHOUT +WARRANTY OF ANY KIND. GARMIN MAKES NO CONDITIONS, WARRANTIES OR REPRESENTATIONS +ABOUT THE SUITABILITY, RELIABILITY, USABILITY, SECURITY, QUALITY, CAPACITY, +PERFORMANCE, AVAILABILITY, TIMELINESS OR ACCURACY OF THE LICENSED TECHNOLOGY AND +OR ANY OTHER PRODUCTS OR SERVICES OR INFORMATION SUPPLIED UNDER THIS AGREEMENT. +GARMIN EXPRESSLY DISCLAIMS ALL CONDITIONS, WARRANTIES AND REPRESENTATIONS, +EXPRESS, IMPLIED OR STATUTORY INCLUDING, BUT NOT LIMITED TO, IMPLIED CONDITIONS +OR WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, DURABILITY, +TITLE AND NON-INFRINGEMENT, WHETHER ARISING BY USAGE OF TRADE, COURSE OF +DEALING, COURSE OF PERFORMANCE OR OTHERWISE. WITHOUT LIMITING THE FOREGOING, +GARMIN MAKES NO WARRANTY OF ANY KIND THAT THE LICENSED TECHNOLOGY, OR ANY +PRODUCTS OR RESULTS OF THE USE THEREOF, WILL MEET LICENSEE'S OR OTHER PERSONS' +REQUIREMENTS, OPERATE WITHOUT INTERRUPTION, ACHIEVE ANY INTENDED RESULT, BE +COMPATIBLE OR WORK WITH ANY SOFTWARE, SYSTEMS, OR OTHER SERVICES, OR BE SECURE, +ACCURATE, COMPLETE, FREE OF HARMFUL CODE OR ERROR FREE. + + +7. Indemnification; Licensee's Responsibility. + +Licensee agrees to indemnify and hold harmless Garmin and its officers, +directors, shareholders, managers, members, partners, employees, agents, +subcontractors, successors and assigns for all losses, damages, deficiencies, +claims, actions, judgments, settlements, interest, awards, penalties, fines, +costs or expenses of whatever kind, including reasonable attorneys' fees and the +costs of enforcing any right to indemnification hereunder, arising out of or +related to (a) Licensee's breach of this Agreement, (b) Licensee's use of the +Licensed Technology or (c) Modifications or Licensee's services, designs and/or +products that are related to the Licensee's use of the Licensed Technology. +Licensee is responsible and liable for all uses of the Licensed Technology +through access thereto provided or enabled by Licensee, directly or indirectly. + + +8. Limitation of Liability. + +TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAW, IN NO EVENT WILL GARMIN, +OR ANY OF ITS LICENSORS, SERVICE PROVIDERS OR SUPPLIERS, BE LIABLE UNDER OR IN +CONNECTION WITH THIS AGREEMENT OR ITS SUBJECT MATTER UNDER ANY LEGAL OR +EQUITABLE THEORY, INCLUDING BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), +STRICT LIABILITY OR OTHERWISE, FOR ANY (A) INCREASED COSTS, DIMINUTION IN VALUE +OR LOST BUSINESS, PRODUCTION, REVENUES OR PROFITS, (B) LOSS OF GOODWILL OR +REPUTATION, (C) USE, INABILITY TO USE, LOSS, INTERRUPTION, DELAY OR RECOVERY OF +ANY LICENSED TECHNOLOGY, (D) LOSS, DAMAGE, CORRUPTION OR RECOVERY OF DATA, OR +BREACH OF DATA OR SYSTEM SECURITY, (E) COST OF REPLACEMENT GOODS OR SERVICES OR +(F) CONSEQUENTIAL, INCIDENTAL, DIRECT, INDIRECT, EXEMPLARY, SPECIAL, ENHANCED OR +PUNITIVE DAMAGES, IN EACH CASE, REGARDLESS OF WHETHER GARMIN WAS ADVISED OF THE +POSSIBILITY OF SUCH LOSSES OR DAMAGES OR SUCH LOSSES OR DAMAGES WERE OTHERWISE +FORESEEABLE. IN NO EVENT WILL THE AGGREGATE LIABILITY OF GARMIN TO LICENSEE +ARISING OUT OF OR RELATED TO THIS AGREEMENT, WHETHER ARISING UNDER OR RELATED TO +BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR ANY OTHER +LEGAL OR EQUITABLE THEORY, EXCEED $100. THE FOREGOING LIMITATIONS APPLY EVEN IF +ANY REMEDY FAILS OF ITS ESSENTIAL PURPOSE. + + +9. Term and Termination. + +If Licensee breaches any of the terms of this Agreement, Garmin may immediately +terminate this Agreement. In addition, Garmin or Licensee may terminate this +Agreement with or without cause upon delivery of 30 days' written notice to the +other party. + +Upon any such termination, (a) all rights of Licensee under this Agreement +(including the license granted to Licensee hereunder) shall cease, (b) Licensee +must immediately stop use of (including product development of devices relating +to) the Licensed Technology and (c) Licensee shall delete all copies of the +Licensed Technology and any Confidential Information; provided, however, +Licensee shall not be required to delete electronic copies of Confidential +Information generated automatically by archival or data backup systems, so long +as such copies are not accessed or used in any manner that violates the terms or +conditions of this Agreement. Any information retained pursuant to the preceding +sentence will continue to receive the protections of Confidential Information +hereunder. Upon request by Garmin, Licensee will certify to Garmin in writing +that it has complied with the requirements of this paragraph. + +All rights, obligations or provisions under this Agreement that, by their +nature, should survive termination or expiration of this Agreement will survive +any expiration or termination of this Agreement, including Sections 4, 5, 6, 7, +8, 9, and 11. + + +10. No Support; Updates. + +This Agreement does not entitle Licensee to any support for the Licensed +Technology. Licensee acknowledges that Garmin may update or modify the Licensed +Technology from time to time and at Garmin's sole discretion (in each instance, +an "Update"), and may require Licensee to obtain and use the most recent version +of the Licensed Technology. Licensee is required to make any changes to +Licensee's products, services, operating environment, equipment or other +property that are required for integration as a result of such Update at +Licensee's sole cost and expense. Licensee's continued use of the Licensed +Technology following an Update constitutes Licensee's binding acceptance of the +Update. + + +11. Miscellaneous. + +a. Relationship of the Parties. The relationship between Garmin and Licensee is +that of independent contractors. Nothing contained in this Agreement will be +construed as creating any agency, partnership, joint venture or other form of +joint enterprise, employment or fiduciary relationship between the parties, and +neither party shall have authority to contract for or bind the other party in +any manner whatsoever. + +b. Notices. Any notice, request, consent, claim, demand, waiver or other +communication under this Agreement will only have legal effect if in writing. +Licensee must send all such notices or other communications in writing to Garmin +at the following address: 1200 East 151st Street, Olathe, Kansas 66062, +Attention: Legal Department. All such notices will be deemed effectively given: +(1) when received, if delivered by hand, with signed confirmation of receipt; +(2) when received, if sent by a nationally recognized overnight courier, +signature required; and (3) on the fifth day after the date mailed by certified +or registered mail, return receipt requested, postage prepaid. Notwithstanding +the foregoing, Licensee hereby consents to receiving electronic communications +from Garmin. Licensee agrees that any notices, agreements, disclosures or other +communications that Garmin sends to Licensee electronically will satisfy any +legal communication requirements, including that such communications be in +writing. + +c. Severability. Licensee agrees that if any part of this Agreement is found to +be invalid, illegal or unenforceable, the remaining terms will remain in effect +for the Licensee and for Garmin. On such determination that any term or other +provision is invalid, illegal, or unenforceable, Garmin and Licensee shall +negotiate in good faith to modify this Agreement so as to effect the original +intent of the parties as closely as possible in a mutually acceptable manner in +order that the transactions contemplated hereby be consummated as originally +contemplated to the greatest extent possible. + +d. Governing Law and Forum Selection. This Agreement shall be governed by the +laws of the state of Kansas, without regard to any conflicts of laws principles. +The parties agree that any dispute arising out of this Agreement shall be +litigated in the federal or state courts in the state of Kansas. The parties +hereby agree to the exclusive jurisdiction and venue of such courts. THE PARTIES +HEREBY WAIVE A TRIAL BY JURY WITH RESPECT TO ANY DISPUTE ARISING OUT OF THIS +AGREEMENT. + +e. Entire Agreement. This Agreement constitutes the sole and entire agreement of +the parties hereto with respect to the subject matter of this Agreement and +supersedes all prior and contemporaneous understandings, agreements, +representations and warranties, both written and oral, with respect to such +subject matter. + +f. Assignment. Licensee shall not assign this Agreement, whether voluntarily, +involuntarily, by operation of law, by merger or otherwise, without Garmin's +prior written consent. For purposes of this Agreement, a change of control will +be deemed an assignment. No assignment, delegation or transfer will relieve +Licensee of any of its obligations or performance under this Agreement. Any +purported assignment, delegation, or transfer in violation of this Section is +void. This Agreement is binding on and inures to the benefit of the parties +hereto and their respective successors and permitted assigns. + +g. Amendment. This Agreement may be amended from time to time by Garmin in its +sole discretion. Licensee is responsible for reviewing and becoming familiar +with any such amendment. Licensee's continued use of the Licensed Technology +after such amendment signifies Licensee's agreement to and acceptance of this +Agreement, as amended. Any other attempt to alter or amend these terms and +conditions will be null and void, unless otherwise agreed to in a written +agreement signed by both Licensee and Garmin. + +h. Force Majeure. In no event will Garmin be liable or responsible to Licensee, +or be deemed to have defaulted under or breached this Agreement, for any failure +or delay in fulfilling or performing any term of this Agreement when and to the +extent such failure or delay is caused by any circumstances beyond Garmin's +reasonable control, including acts of God, flood, fire, earthquake or explosion, +war, terrorism, invasion, riot or other civil unrest, embargoes or blockades, +national or regional emergency, epidemics, pandemics, diseases, strikes, labor +stoppages or slowdowns or other industrial disturbances, passage or change of +law or any other action taken by a governmental or public authority, including +imposing an export or import restriction, quota, quarantine restrictions or +other restriction or prohibition or any complete or partial government shutdown. + +i. No Third-Party Beneficiaries. Except as expressly set forth herein, this +Agreement is for the sole benefit of the parties hereto and their respective +successors and permitted assigns and nothing herein is intended to or will +confer on any other person or entity any legal or equitable right, benefit or +remedy of any nature whatsoever under or by reason of this Agreement. + +j. Waiver. No waiver by either party of any of the provisions hereof is +effective unless explicitly set forth in writing and signed by the party so +waiving. No failure to exercise, or delay in exercising, any rights, remedy, +power or privilege arising from this Agreement will operate or be construed as +a waiver thereof; nor will any single or partial exercise of any right, remedy, +power or privilege hereunder preclude any other or further exercise thereof or +the exercise of any other right, remedy, power or privilege. + +k. Equitable Relief. Licensee acknowledges and agrees that a breach or +threatened breach by Licensee of any of its obligations under this Agreement +would cause Garmin irreparable harm for which monetary damages may not be an +adequate remedy and that, in the event of such breach or threatened breach, +Garmin will be entitled to seek equitable relief, including a restraining order, +an injunction, specific performance, and any other relief that may be available +from any court of competent jurisdiction, without any requirement to post a bond +or other security, or to prove actual damages or that monetary damages are not +an adequate remedy. Such remedies are not exclusive and are in addition to all +other remedies that may be available at law, in equity or otherwise. + + +Last updated: October 12, 2022 \ No newline at end of file diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..f2fd690 --- /dev/null +++ b/Package.swift @@ -0,0 +1,56 @@ +// swift-tools-version:5.3 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// + + +import PackageDescription + +let package = Package( + name: "FIT", + platforms: [ + .iOS(.v13), + .macOS(.v10_15), + .tvOS(.v13), + .watchOS(.v6), + ], + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "FIT", + targets: ["SwiftFIT","ObjcFIT"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "cppfit", + dependencies: [], + resources: [ + .copy("include")], + cSettings: [ + .headerSearchPath("./include/")]), + .target( + name: "ObjcFIT", + dependencies: ["cppfit"], + cSettings: [ + .headerSearchPath("../cppfit/include")]), + .target( + name: "SwiftFIT", + dependencies: ["ObjcFIT"]), + .testTarget( + name: "FITTests", + dependencies: ["SwiftFIT"]), + ], + cxxLanguageStandard: .gnucxx11 +) + diff --git a/Sources/ObjcFIT/FITAccelerometerDataMesg.mm b/Sources/ObjcFIT/FITAccelerometerDataMesg.mm new file mode 100644 index 0000000..effcf1b --- /dev/null +++ b/Sources/ObjcFIT/FITAccelerometerDataMesg.mm @@ -0,0 +1,282 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITAccelerometerDataMesg.h" + +@implementation FITAccelerometerDataMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_ACCELEROMETER_DATA]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SampleTimeOffset +- (uint8_t)numSampleTimeOffsetValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSampleTimeOffsetValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSampleTimeOffsetforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:1 andValue:(sampleTimeOffset) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AccelX +- (uint8_t)numAccelXValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAccelXValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAccelXforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAccelX:(FITUInt16)accelX forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:2 andValue:(accelX) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AccelY +- (uint8_t)numAccelYValues { + return [super getFieldNumValuesForField:3 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAccelYValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAccelYforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:3 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAccelY:(FITUInt16)accelY forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:3 andValue:(accelY) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AccelZ +- (uint8_t)numAccelZValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAccelZValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAccelZforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAccelZ:(FITUInt16)accelZ forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:4 andValue:(accelZ) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedAccelX +- (uint8_t)numCalibratedAccelXValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedAccelXValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedAccelXforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedAccelX:(FITFloat32)calibratedAccelX forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:5 andValue:(calibratedAccelX) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedAccelY +- (uint8_t)numCalibratedAccelYValues { + return [super getFieldNumValuesForField:6 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedAccelYValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedAccelYforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:6 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedAccelY:(FITFloat32)calibratedAccelY forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:6 andValue:(calibratedAccelY) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedAccelZ +- (uint8_t)numCalibratedAccelZValues { + return [super getFieldNumValuesForField:7 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedAccelZValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedAccelZforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:7 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedAccelZ:(FITFloat32)calibratedAccelZ forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:7 andValue:(calibratedAccelZ) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CompressedCalibratedAccelX +- (uint8_t)numCompressedCalibratedAccelXValues { + return [super getFieldNumValuesForField:8 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCompressedCalibratedAccelXValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt16)getCompressedCalibratedAccelXforIndex:(uint8_t)index { + return ([super getFieldSINT16ValueForField:8 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCompressedCalibratedAccelX:(FITSInt16)compressedCalibratedAccelX forIndex:(uint8_t)index { + [super setFieldSINT16ValueForField:8 andValue:(compressedCalibratedAccelX) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CompressedCalibratedAccelY +- (uint8_t)numCompressedCalibratedAccelYValues { + return [super getFieldNumValuesForField:9 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCompressedCalibratedAccelYValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt16)getCompressedCalibratedAccelYforIndex:(uint8_t)index { + return ([super getFieldSINT16ValueForField:9 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCompressedCalibratedAccelY:(FITSInt16)compressedCalibratedAccelY forIndex:(uint8_t)index { + [super setFieldSINT16ValueForField:9 andValue:(compressedCalibratedAccelY) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CompressedCalibratedAccelZ +- (uint8_t)numCompressedCalibratedAccelZValues { + return [super getFieldNumValuesForField:10 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCompressedCalibratedAccelZValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt16)getCompressedCalibratedAccelZforIndex:(uint8_t)index { + return ([super getFieldSINT16ValueForField:10 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCompressedCalibratedAccelZ:(FITSInt16)compressedCalibratedAccelZ forIndex:(uint8_t)index { + [super setFieldSINT16ValueForField:10 andValue:(compressedCalibratedAccelZ) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITActivityMesg.mm b/Sources/ObjcFIT/FITActivityMesg.mm new file mode 100644 index 0000000..47976f2 --- /dev/null +++ b/Sources/ObjcFIT/FITActivityMesg.mm @@ -0,0 +1,170 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITActivityMesg.h" + +@implementation FITActivityMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_ACTIVITY]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalTimerTime { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime { + [super setFieldFLOAT32ValueForField:0 andValue:(totalTimerTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumSessions +- (BOOL)isNumSessionsValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumSessions { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumSessions:(FITUInt16)numSessions { + [super setFieldUINT16ValueForField:1 andValue:(numSessions) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITActivity)getType { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITActivity)type { + [super setFieldENUMValueForField:2 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Event +- (BOOL)isEventValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEvent)getEvent { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEvent:(FITEvent)event { + [super setFieldENUMValueForField:3 andValue:(event) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventType +- (BOOL)isEventTypeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEventType)getEventType { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventType:(FITEventType)eventType { + [super setFieldENUMValueForField:4 andValue:(eventType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LocalTimestamp +- (BOOL)isLocalTimestampValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocalDateTime)getLocalTimestamp { + return ([super getFieldUINT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp { + [super setFieldUINT32ValueForField:5 andValue:(localTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventGroup +- (BOOL)isEventGroupValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEventGroup { + return ([super getFieldUINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventGroup:(FITUInt8)eventGroup { + [super setFieldUINT8ValueForField:6 andValue:(eventGroup) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITAntChannelIdMesg.mm b/Sources/ObjcFIT/FITAntChannelIdMesg.mm new file mode 100644 index 0000000..c24945f --- /dev/null +++ b/Sources/ObjcFIT/FITAntChannelIdMesg.mm @@ -0,0 +1,116 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITAntChannelIdMesg.h" + +@implementation FITAntChannelIdMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_ANT_CHANNEL_ID]; + + return self; +} + +// ChannelNumber +- (BOOL)isChannelNumberValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getChannelNumber { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setChannelNumber:(FITUInt8)channelNumber { + [super setFieldUINT8ValueForField:0 andValue:(channelNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceType +- (BOOL)isDeviceTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getDeviceType { + return ([super getFieldUINT8ZValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceType:(FITUInt8z)deviceType { + [super setFieldUINT8ZValueForField:1 andValue:(deviceType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceNumber +- (BOOL)isDeviceNumberValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getDeviceNumber { + return ([super getFieldUINT16ZValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceNumber:(FITUInt16z)deviceNumber { + [super setFieldUINT16ZValueForField:2 andValue:(deviceNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TransmissionType +- (BOOL)isTransmissionTypeValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getTransmissionType { + return ([super getFieldUINT8ZValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTransmissionType:(FITUInt8z)transmissionType { + [super setFieldUINT8ZValueForField:3 andValue:(transmissionType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceIndex +- (BOOL)isDeviceIndexValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDeviceIndex)getDeviceIndex { + return ([super getFieldUINT8ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex { + [super setFieldUINT8ValueForField:4 andValue:(deviceIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITAntRxMesg.mm b/Sources/ObjcFIT/FITAntRxMesg.mm new file mode 100644 index 0000000..614e7fc --- /dev/null +++ b/Sources/ObjcFIT/FITAntRxMesg.mm @@ -0,0 +1,142 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITAntRxMesg.h" + +@implementation FITAntRxMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_ANT_RX]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFractionalTimestamp { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp { + [super setFieldFLOAT32ValueForField:0 andValue:(fractionalTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MesgId +- (BOOL)isMesgIdValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getMesgId { + return ([super getFieldBYTEValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMesgId:(FITByte)mesgId { + [super setFieldBYTEValueForField:1 andValue:(mesgId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MesgData +- (uint8_t)numMesgDataValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMesgDataValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getMesgDataforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMesgData:(FITByte)mesgData forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:2 andValue:(mesgData) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ChannelNumber +- (BOOL)isChannelNumberValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getChannelNumber { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setChannelNumber:(FITUInt8)channelNumber { + [super setFieldUINT8ValueForField:3 andValue:(channelNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Data +- (uint8_t)numDataValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isDataValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getDataforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setData:(FITByte)data forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:4 andValue:(data) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITAntTxMesg.mm b/Sources/ObjcFIT/FITAntTxMesg.mm new file mode 100644 index 0000000..def6229 --- /dev/null +++ b/Sources/ObjcFIT/FITAntTxMesg.mm @@ -0,0 +1,142 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITAntTxMesg.h" + +@implementation FITAntTxMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_ANT_TX]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFractionalTimestamp { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp { + [super setFieldFLOAT32ValueForField:0 andValue:(fractionalTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MesgId +- (BOOL)isMesgIdValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getMesgId { + return ([super getFieldBYTEValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMesgId:(FITByte)mesgId { + [super setFieldBYTEValueForField:1 andValue:(mesgId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MesgData +- (uint8_t)numMesgDataValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMesgDataValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getMesgDataforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMesgData:(FITByte)mesgData forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:2 andValue:(mesgData) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ChannelNumber +- (BOOL)isChannelNumberValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getChannelNumber { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setChannelNumber:(FITUInt8)channelNumber { + [super setFieldUINT8ValueForField:3 andValue:(channelNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Data +- (uint8_t)numDataValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isDataValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getDataforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setData:(FITByte)data forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:4 andValue:(data) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITAviationAttitudeMesg.mm b/Sources/ObjcFIT/FITAviationAttitudeMesg.mm new file mode 100644 index 0000000..2eb2c1f --- /dev/null +++ b/Sources/ObjcFIT/FITAviationAttitudeMesg.mm @@ -0,0 +1,282 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITAviationAttitudeMesg.h" + +@implementation FITAviationAttitudeMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_AVIATION_ATTITUDE]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SystemTime +- (uint8_t)numSystemTimeValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSystemTimeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSystemTimeforIndex:(uint8_t)index { + return ([super getFieldUINT32ValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSystemTime:(FITUInt32)systemTime forIndex:(uint8_t)index { + [super setFieldUINT32ValueForField:1 andValue:(systemTime) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Pitch +- (uint8_t)numPitchValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isPitchValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPitchforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPitch:(FITFloat32)pitch forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:2 andValue:(pitch) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Roll +- (uint8_t)numRollValues { + return [super getFieldNumValuesForField:3 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isRollValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRollforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:3 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRoll:(FITFloat32)roll forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:3 andValue:(roll) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AccelLateral +- (uint8_t)numAccelLateralValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAccelLateralValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAccelLateralforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAccelLateral:(FITFloat32)accelLateral forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:4 andValue:(accelLateral) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AccelNormal +- (uint8_t)numAccelNormalValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAccelNormalValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAccelNormalforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAccelNormal:(FITFloat32)accelNormal forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:5 andValue:(accelNormal) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TurnRate +- (uint8_t)numTurnRateValues { + return [super getFieldNumValuesForField:6 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTurnRateValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTurnRateforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:6 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTurnRate:(FITFloat32)turnRate forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:6 andValue:(turnRate) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Stage +- (uint8_t)numStageValues { + return [super getFieldNumValuesForField:7 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isStageValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAttitudeStage)getStageforIndex:(uint8_t)index { + return ([super getFieldENUMValueForField:7 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStage:(FITAttitudeStage)stage forIndex:(uint8_t)index { + [super setFieldENUMValueForField:7 andValue:(stage) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AttitudeStageComplete +- (uint8_t)numAttitudeStageCompleteValues { + return [super getFieldNumValuesForField:8 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAttitudeStageCompleteValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAttitudeStageCompleteforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:8 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAttitudeStageComplete:(FITUInt8)attitudeStageComplete forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:8 andValue:(attitudeStageComplete) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Track +- (uint8_t)numTrackValues { + return [super getFieldNumValuesForField:9 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTrackValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTrackforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:9 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTrack:(FITFloat32)track forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:9 andValue:(track) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Validity +- (uint8_t)numValidityValues { + return [super getFieldNumValuesForField:10 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isValidityValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAttitudeValidity)getValidityforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:10 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setValidity:(FITAttitudeValidity)validity forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:10 andValue:(validity) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITBarometerDataMesg.mm b/Sources/ObjcFIT/FITBarometerDataMesg.mm new file mode 100644 index 0000000..0b667a6 --- /dev/null +++ b/Sources/ObjcFIT/FITBarometerDataMesg.mm @@ -0,0 +1,106 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITBarometerDataMesg.h" + +@implementation FITBarometerDataMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_BAROMETER_DATA]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SampleTimeOffset +- (uint8_t)numSampleTimeOffsetValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSampleTimeOffsetValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSampleTimeOffsetforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:1 andValue:(sampleTimeOffset) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BaroPres +- (uint8_t)numBaroPresValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isBaroPresValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getBaroPresforIndex:(uint8_t)index { + return ([super getFieldUINT32ValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBaroPres:(FITUInt32)baroPres forIndex:(uint8_t)index { + [super setFieldUINT32ValueForField:2 andValue:(baroPres) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITBikeProfileMesg.mm b/Sources/ObjcFIT/FITBikeProfileMesg.mm new file mode 100644 index 0000000..1f729ee --- /dev/null +++ b/Sources/ObjcFIT/FITBikeProfileMesg.mm @@ -0,0 +1,611 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITBikeProfileMesg.h" + +@implementation FITBikeProfileMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_BIKE_PROFILE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:0 andValue:(name) forIndex:0]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:1 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:2 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Odometer +- (BOOL)isOdometerValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getOdometer { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOdometer:(FITFloat32)odometer { + [super setFieldFLOAT32ValueForField:3 andValue:(odometer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikeSpdAntId +- (BOOL)isBikeSpdAntIdValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getBikeSpdAntId { + return ([super getFieldUINT16ZValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikeSpdAntId:(FITUInt16z)bikeSpdAntId { + [super setFieldUINT16ZValueForField:4 andValue:(bikeSpdAntId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikeCadAntId +- (BOOL)isBikeCadAntIdValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getBikeCadAntId { + return ([super getFieldUINT16ZValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikeCadAntId:(FITUInt16z)bikeCadAntId { + [super setFieldUINT16ZValueForField:5 andValue:(bikeCadAntId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikeSpdcadAntId +- (BOOL)isBikeSpdcadAntIdValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getBikeSpdcadAntId { + return ([super getFieldUINT16ZValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikeSpdcadAntId:(FITUInt16z)bikeSpdcadAntId { + [super setFieldUINT16ZValueForField:6 andValue:(bikeSpdcadAntId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikePowerAntId +- (BOOL)isBikePowerAntIdValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getBikePowerAntId { + return ([super getFieldUINT16ZValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikePowerAntId:(FITUInt16z)bikePowerAntId { + [super setFieldUINT16ZValueForField:7 andValue:(bikePowerAntId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CustomWheelsize +- (BOOL)isCustomWheelsizeValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCustomWheelsize { + return ([super getFieldFLOAT32ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCustomWheelsize:(FITFloat32)customWheelsize { + [super setFieldFLOAT32ValueForField:8 andValue:(customWheelsize) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutoWheelsize +- (BOOL)isAutoWheelsizeValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAutoWheelsize { + return ([super getFieldFLOAT32ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutoWheelsize:(FITFloat32)autoWheelsize { + [super setFieldFLOAT32ValueForField:9 andValue:(autoWheelsize) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikeWeight +- (BOOL)isBikeWeightValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBikeWeight { + return ([super getFieldFLOAT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikeWeight:(FITFloat32)bikeWeight { + [super setFieldFLOAT32ValueForField:10 andValue:(bikeWeight) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PowerCalFactor +- (BOOL)isPowerCalFactorValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPowerCalFactor { + return ([super getFieldFLOAT32ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPowerCalFactor:(FITFloat32)powerCalFactor { + [super setFieldFLOAT32ValueForField:11 andValue:(powerCalFactor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutoWheelCal +- (BOOL)isAutoWheelCalValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getAutoWheelCal { + return ([super getFieldENUMValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutoWheelCal:(FITBool)autoWheelCal { + [super setFieldENUMValueForField:12 andValue:(autoWheelCal) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutoPowerZero +- (BOOL)isAutoPowerZeroValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getAutoPowerZero { + return ([super getFieldENUMValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutoPowerZero:(FITBool)autoPowerZero { + [super setFieldENUMValueForField:13 andValue:(autoPowerZero) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Id +- (BOOL)isIdValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getId { + return ([super getFieldUINT8ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setId:(FITUInt8)id { + [super setFieldUINT8ValueForField:14 andValue:(id) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SpdEnabled +- (BOOL)isSpdEnabledValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getSpdEnabled { + return ([super getFieldENUMValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSpdEnabled:(FITBool)spdEnabled { + [super setFieldENUMValueForField:15 andValue:(spdEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CadEnabled +- (BOOL)isCadEnabledValid { + const fit::Field* field = [super getField:16]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getCadEnabled { + return ([super getFieldENUMValueForField:16 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCadEnabled:(FITBool)cadEnabled { + [super setFieldENUMValueForField:16 andValue:(cadEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SpdcadEnabled +- (BOOL)isSpdcadEnabledValid { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getSpdcadEnabled { + return ([super getFieldENUMValueForField:17 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSpdcadEnabled:(FITBool)spdcadEnabled { + [super setFieldENUMValueForField:17 andValue:(spdcadEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PowerEnabled +- (BOOL)isPowerEnabledValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getPowerEnabled { + return ([super getFieldENUMValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPowerEnabled:(FITBool)powerEnabled { + [super setFieldENUMValueForField:18 andValue:(powerEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CrankLength +- (BOOL)isCrankLengthValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCrankLength { + return ([super getFieldFLOAT32ValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCrankLength:(FITFloat32)crankLength { + [super setFieldFLOAT32ValueForField:19 andValue:(crankLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getEnabled { + return ([super getFieldENUMValueForField:20 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITBool)enabled { + [super setFieldENUMValueForField:20 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikeSpdAntIdTransType +- (BOOL)isBikeSpdAntIdTransTypeValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getBikeSpdAntIdTransType { + return ([super getFieldUINT8ZValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikeSpdAntIdTransType:(FITUInt8z)bikeSpdAntIdTransType { + [super setFieldUINT8ZValueForField:21 andValue:(bikeSpdAntIdTransType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikeCadAntIdTransType +- (BOOL)isBikeCadAntIdTransTypeValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getBikeCadAntIdTransType { + return ([super getFieldUINT8ZValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikeCadAntIdTransType:(FITUInt8z)bikeCadAntIdTransType { + [super setFieldUINT8ZValueForField:22 andValue:(bikeCadAntIdTransType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikeSpdcadAntIdTransType +- (BOOL)isBikeSpdcadAntIdTransTypeValid { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getBikeSpdcadAntIdTransType { + return ([super getFieldUINT8ZValueForField:23 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikeSpdcadAntIdTransType:(FITUInt8z)bikeSpdcadAntIdTransType { + [super setFieldUINT8ZValueForField:23 andValue:(bikeSpdcadAntIdTransType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BikePowerAntIdTransType +- (BOOL)isBikePowerAntIdTransTypeValid { + const fit::Field* field = [super getField:24]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getBikePowerAntIdTransType { + return ([super getFieldUINT8ZValueForField:24 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBikePowerAntIdTransType:(FITUInt8z)bikePowerAntIdTransType { + [super setFieldUINT8ZValueForField:24 andValue:(bikePowerAntIdTransType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OdometerRollover +- (BOOL)isOdometerRolloverValid { + const fit::Field* field = [super getField:37]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getOdometerRollover { + return ([super getFieldUINT8ValueForField:37 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOdometerRollover:(FITUInt8)odometerRollover { + [super setFieldUINT8ValueForField:37 andValue:(odometerRollover) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FrontGearNum +- (BOOL)isFrontGearNumValid { + const fit::Field* field = [super getField:38]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getFrontGearNum { + return ([super getFieldUINT8ZValueForField:38 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFrontGearNum:(FITUInt8z)frontGearNum { + [super setFieldUINT8ZValueForField:38 andValue:(frontGearNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FrontGear +- (uint8_t)numFrontGearValues { + return [super getFieldNumValuesForField:39 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isFrontGearValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:39]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getFrontGearforIndex:(uint8_t)index { + return ([super getFieldUINT8ZValueForField:39 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFrontGear:(FITUInt8z)frontGear forIndex:(uint8_t)index { + [super setFieldUINT8ZValueForField:39 andValue:(frontGear) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RearGearNum +- (BOOL)isRearGearNumValid { + const fit::Field* field = [super getField:40]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getRearGearNum { + return ([super getFieldUINT8ZValueForField:40 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRearGearNum:(FITUInt8z)rearGearNum { + [super setFieldUINT8ZValueForField:40 andValue:(rearGearNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RearGear +- (uint8_t)numRearGearValues { + return [super getFieldNumValuesForField:41 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isRearGearValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:41]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getRearGearforIndex:(uint8_t)index { + return ([super getFieldUINT8ZValueForField:41 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRearGear:(FITUInt8z)rearGear forIndex:(uint8_t)index { + [super setFieldUINT8ZValueForField:41 andValue:(rearGear) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ShimanoDi2Enabled +- (BOOL)isShimanoDi2EnabledValid { + const fit::Field* field = [super getField:44]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getShimanoDi2Enabled { + return ([super getFieldENUMValueForField:44 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setShimanoDi2Enabled:(FITBool)shimanoDi2Enabled { + [super setFieldENUMValueForField:44 andValue:(shimanoDi2Enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITBloodPressureMesg.mm b/Sources/ObjcFIT/FITBloodPressureMesg.mm new file mode 100644 index 0000000..7c455e1 --- /dev/null +++ b/Sources/ObjcFIT/FITBloodPressureMesg.mm @@ -0,0 +1,224 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITBloodPressureMesg.h" + +@implementation FITBloodPressureMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_BLOOD_PRESSURE]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SystolicPressure +- (BOOL)isSystolicPressureValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSystolicPressure { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSystolicPressure:(FITUInt16)systolicPressure { + [super setFieldUINT16ValueForField:0 andValue:(systolicPressure) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DiastolicPressure +- (BOOL)isDiastolicPressureValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getDiastolicPressure { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDiastolicPressure:(FITUInt16)diastolicPressure { + [super setFieldUINT16ValueForField:1 andValue:(diastolicPressure) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MeanArterialPressure +- (BOOL)isMeanArterialPressureValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMeanArterialPressure { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMeanArterialPressure:(FITUInt16)meanArterialPressure { + [super setFieldUINT16ValueForField:2 andValue:(meanArterialPressure) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Map3SampleMean +- (BOOL)isMap3SampleMeanValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMap3SampleMean { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMap3SampleMean:(FITUInt16)map3SampleMean { + [super setFieldUINT16ValueForField:3 andValue:(map3SampleMean) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MapMorningValues +- (BOOL)isMapMorningValuesValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMapMorningValues { + return ([super getFieldUINT16ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMapMorningValues:(FITUInt16)mapMorningValues { + [super setFieldUINT16ValueForField:4 andValue:(mapMorningValues) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MapEveningValues +- (BOOL)isMapEveningValuesValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMapEveningValues { + return ([super getFieldUINT16ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMapEveningValues:(FITUInt16)mapEveningValues { + [super setFieldUINT16ValueForField:5 andValue:(mapEveningValues) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeartRate +- (BOOL)isHeartRateValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHeartRate { + return ([super getFieldUINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeartRate:(FITUInt8)heartRate { + [super setFieldUINT8ValueForField:6 andValue:(heartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeartRateType +- (BOOL)isHeartRateTypeValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITHrType)getHeartRateType { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeartRateType:(FITHrType)heartRateType { + [super setFieldENUMValueForField:7 andValue:(heartRateType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Status +- (BOOL)isStatusValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBpStatus)getStatus { + return ([super getFieldENUMValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStatus:(FITBpStatus)status { + [super setFieldENUMValueForField:8 andValue:(status) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UserProfileIndex +- (BOOL)isUserProfileIndexValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getUserProfileIndex { + return ([super getFieldUINT16ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUserProfileIndex:(FITMessageIndex)userProfileIndex { + [super setFieldUINT16ValueForField:9 andValue:(userProfileIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITCadenceZoneMesg.mm b/Sources/ObjcFIT/FITCadenceZoneMesg.mm new file mode 100644 index 0000000..b9a56bf --- /dev/null +++ b/Sources/ObjcFIT/FITCadenceZoneMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITCadenceZoneMesg.h" + +@implementation FITCadenceZoneMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_CADENCE_ZONE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HighValue +- (BOOL)isHighValueValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHighValue { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHighValue:(FITUInt8)highValue { + [super setFieldUINT8ValueForField:0 andValue:(highValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:1 andValue:(name) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITCameraEventMesg.mm b/Sources/ObjcFIT/FITCameraEventMesg.mm new file mode 100644 index 0000000..14a7bea --- /dev/null +++ b/Sources/ObjcFIT/FITCameraEventMesg.mm @@ -0,0 +1,117 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITCameraEventMesg.h" + +@implementation FITCameraEventMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_CAMERA_EVENT]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CameraEventType +- (BOOL)isCameraEventTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITCameraEventType)getCameraEventType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCameraEventType:(FITCameraEventType)cameraEventType { + [super setFieldENUMValueForField:1 andValue:(cameraEventType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CameraFileUuid +- (BOOL)isCameraFileUuidValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getCameraFileUuid { + return ([super getFieldSTRINGValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCameraFileUuid:(NSString *)cameraFileUuid { + [super setFieldSTRINGValueForField:2 andValue:(cameraFileUuid) forIndex:0]; +} + +// CameraOrientation +- (BOOL)isCameraOrientationValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITCameraOrientationType)getCameraOrientation { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCameraOrientation:(FITCameraOrientationType)cameraOrientation { + [super setFieldENUMValueForField:3 andValue:(cameraOrientation) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITCapabilitiesMesg.mm b/Sources/ObjcFIT/FITCapabilitiesMesg.mm new file mode 100644 index 0000000..67e266e --- /dev/null +++ b/Sources/ObjcFIT/FITCapabilitiesMesg.mm @@ -0,0 +1,106 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITCapabilitiesMesg.h" + +@implementation FITCapabilitiesMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_CAPABILITIES]; + + return self; +} + +// Languages +- (uint8_t)numLanguagesValues { + return [super getFieldNumValuesForField:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLanguagesValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getLanguagesforIndex:(uint8_t)index { + return ([super getFieldUINT8ZValueForField:0 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLanguages:(FITUInt8z)languages forIndex:(uint8_t)index { + [super setFieldUINT8ZValueForField:0 andValue:(languages) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sports +- (uint8_t)numSportsValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSportsValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSportBits0)getSportsforIndex:(uint8_t)index { + return ([super getFieldUINT8ZValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSports:(FITSportBits0)sports forIndex:(uint8_t)index { + [super setFieldUINT8ZValueForField:1 andValue:(sports) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WorkoutsSupported +- (BOOL)isWorkoutsSupportedValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutCapabilities)getWorkoutsSupported { + return ([super getFieldUINT32ZValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWorkoutsSupported:(FITWorkoutCapabilities)workoutsSupported { + [super setFieldUINT32ZValueForField:21 andValue:(workoutsSupported) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ConnectivitySupported +- (BOOL)isConnectivitySupportedValid { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITConnectivityCapabilities)getConnectivitySupported { + return ([super getFieldUINT32ZValueForField:23 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setConnectivitySupported:(FITConnectivityCapabilities)connectivitySupported { + [super setFieldUINT32ZValueForField:23 andValue:(connectivitySupported) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITClimbProMesg.mm b/Sources/ObjcFIT/FITClimbProMesg.mm new file mode 100644 index 0000000..05444fc --- /dev/null +++ b/Sources/ObjcFIT/FITClimbProMesg.mm @@ -0,0 +1,152 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITClimbProMesg.h" + +@implementation FITClimbProMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_CLIMB_PRO]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLat +- (BOOL)isPositionLatValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLat { + return ([super getFieldSINT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLat:(FITSInt32)positionLat { + [super setFieldSINT32ValueForField:0 andValue:(positionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLong +- (BOOL)isPositionLongValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLong { + return ([super getFieldSINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLong:(FITSInt32)positionLong { + [super setFieldSINT32ValueForField:1 andValue:(positionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ClimbProEvent +- (BOOL)isClimbProEventValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITClimbProEvent)getClimbProEvent { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setClimbProEvent:(FITClimbProEvent)climbProEvent { + [super setFieldENUMValueForField:2 andValue:(climbProEvent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ClimbNumber +- (BOOL)isClimbNumberValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getClimbNumber { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setClimbNumber:(FITUInt16)climbNumber { + [super setFieldUINT16ValueForField:3 andValue:(climbNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ClimbCategory +- (BOOL)isClimbCategoryValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getClimbCategory { + return ([super getFieldUINT8ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setClimbCategory:(FITUInt8)climbCategory { + [super setFieldUINT8ValueForField:4 andValue:(climbCategory) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CurrentDist +- (BOOL)isCurrentDistValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCurrentDist { + return ([super getFieldFLOAT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCurrentDist:(FITFloat32)currentDist { + [super setFieldFLOAT32ValueForField:5 andValue:(currentDist) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITConnectivityMesg.mm b/Sources/ObjcFIT/FITConnectivityMesg.mm new file mode 100644 index 0000000..e784947 --- /dev/null +++ b/Sources/ObjcFIT/FITConnectivityMesg.mm @@ -0,0 +1,261 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITConnectivityMesg.h" + +@implementation FITConnectivityMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_CONNECTIVITY]; + + return self; +} + +// BluetoothEnabled +- (BOOL)isBluetoothEnabledValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getBluetoothEnabled { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBluetoothEnabled:(FITBool)bluetoothEnabled { + [super setFieldENUMValueForField:0 andValue:(bluetoothEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BluetoothLeEnabled +- (BOOL)isBluetoothLeEnabledValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getBluetoothLeEnabled { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBluetoothLeEnabled:(FITBool)bluetoothLeEnabled { + [super setFieldENUMValueForField:1 andValue:(bluetoothLeEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AntEnabled +- (BOOL)isAntEnabledValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getAntEnabled { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAntEnabled:(FITBool)antEnabled { + [super setFieldENUMValueForField:2 andValue:(antEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:3 andValue:(name) forIndex:0]; +} + +// LiveTrackingEnabled +- (BOOL)isLiveTrackingEnabledValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getLiveTrackingEnabled { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLiveTrackingEnabled:(FITBool)liveTrackingEnabled { + [super setFieldENUMValueForField:4 andValue:(liveTrackingEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WeatherConditionsEnabled +- (BOOL)isWeatherConditionsEnabledValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getWeatherConditionsEnabled { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeatherConditionsEnabled:(FITBool)weatherConditionsEnabled { + [super setFieldENUMValueForField:5 andValue:(weatherConditionsEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WeatherAlertsEnabled +- (BOOL)isWeatherAlertsEnabledValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getWeatherAlertsEnabled { + return ([super getFieldENUMValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeatherAlertsEnabled:(FITBool)weatherAlertsEnabled { + [super setFieldENUMValueForField:6 andValue:(weatherAlertsEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutoActivityUploadEnabled +- (BOOL)isAutoActivityUploadEnabledValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getAutoActivityUploadEnabled { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutoActivityUploadEnabled:(FITBool)autoActivityUploadEnabled { + [super setFieldENUMValueForField:7 andValue:(autoActivityUploadEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CourseDownloadEnabled +- (BOOL)isCourseDownloadEnabledValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getCourseDownloadEnabled { + return ([super getFieldENUMValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCourseDownloadEnabled:(FITBool)courseDownloadEnabled { + [super setFieldENUMValueForField:8 andValue:(courseDownloadEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WorkoutDownloadEnabled +- (BOOL)isWorkoutDownloadEnabledValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getWorkoutDownloadEnabled { + return ([super getFieldENUMValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWorkoutDownloadEnabled:(FITBool)workoutDownloadEnabled { + [super setFieldENUMValueForField:9 andValue:(workoutDownloadEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GpsEphemerisDownloadEnabled +- (BOOL)isGpsEphemerisDownloadEnabledValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getGpsEphemerisDownloadEnabled { + return ([super getFieldENUMValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGpsEphemerisDownloadEnabled:(FITBool)gpsEphemerisDownloadEnabled { + [super setFieldENUMValueForField:10 andValue:(gpsEphemerisDownloadEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// IncidentDetectionEnabled +- (BOOL)isIncidentDetectionEnabledValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getIncidentDetectionEnabled { + return ([super getFieldENUMValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setIncidentDetectionEnabled:(FITBool)incidentDetectionEnabled { + [super setFieldENUMValueForField:11 andValue:(incidentDetectionEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GrouptrackEnabled +- (BOOL)isGrouptrackEnabledValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getGrouptrackEnabled { + return ([super getFieldENUMValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGrouptrackEnabled:(FITBool)grouptrackEnabled { + [super setFieldENUMValueForField:12 andValue:(grouptrackEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITCourseMesg.mm b/Sources/ObjcFIT/FITCourseMesg.mm new file mode 100644 index 0000000..64e655f --- /dev/null +++ b/Sources/ObjcFIT/FITCourseMesg.mm @@ -0,0 +1,99 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITCourseMesg.h" + +@implementation FITCourseMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_COURSE]; + + return self; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:4 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:5 andValue:(name) forIndex:0]; +} + +// Capabilities +- (BOOL)isCapabilitiesValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITCourseCapabilities)getCapabilities { + return ([super getFieldUINT32ZValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCapabilities:(FITCourseCapabilities)capabilities { + [super setFieldUINT32ZValueForField:6 andValue:(capabilities) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:7 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITCoursePointMesg.mm b/Sources/ObjcFIT/FITCoursePointMesg.mm new file mode 100644 index 0000000..29c4006 --- /dev/null +++ b/Sources/ObjcFIT/FITCoursePointMesg.mm @@ -0,0 +1,171 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITCoursePointMesg.h" + +@implementation FITCoursePointMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_COURSE_POINT]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:1 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLat +- (BOOL)isPositionLatValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLat { + return ([super getFieldSINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLat:(FITSInt32)positionLat { + [super setFieldSINT32ValueForField:2 andValue:(positionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLong +- (BOOL)isPositionLongValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLong { + return ([super getFieldSINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLong:(FITSInt32)positionLong { + [super setFieldSINT32ValueForField:3 andValue:(positionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Distance +- (BOOL)isDistanceValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDistance { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistance:(FITFloat32)distance { + [super setFieldFLOAT32ValueForField:4 andValue:(distance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITCoursePoint)getType { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITCoursePoint)type { + [super setFieldENUMValueForField:5 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:6 andValue:(name) forIndex:0]; +} + +// Favorite +- (BOOL)isFavoriteValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getFavorite { + return ([super getFieldENUMValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFavorite:(FITBool)favorite { + [super setFieldENUMValueForField:8 andValue:(favorite) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITDate.mm b/Sources/ObjcFIT/FITDate.mm new file mode 100644 index 0000000..3dad3b6 --- /dev/null +++ b/Sources/ObjcFIT/FITDate.mm @@ -0,0 +1,126 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITDate.h" + +@interface FITDate () +@property (nonatomic, readonly) NSTimeInterval timestampPlusFractionalTimestamp; +@end + +@implementation FITDate + ++ (NSDate *) FITEpoch { + static NSDate *epoch; + static dispatch_once_t epochOnceToken; + dispatch_once(&epochOnceToken, ^{ + epoch = [NSDate dateWithTimeIntervalSince1970:UnixEpochToFITEpoch]; + }); + return epoch; +} + ++ (NSDate *) DateFromFITDate:(FITDate *) date; { + return [[FITDate FITEpoch] dateByAddingTimeInterval:(NSTimeInterval)date.timestamp + date.fractionalTimeStamp]; +} + ++ (NSDate *)DateFromFITDateTime:(FITDateTime) timestamp { + return [[FITDate FITEpoch] dateByAddingTimeInterval:(NSTimeInterval)timestamp]; +} + ++ (FITDateTime) FITDateTimeFromDate:(NSDate *) date { + NSTimeInterval timestamp = [date timeIntervalSinceDate:[self FITEpoch]]; + return (FITDateTime)timestamp; +} + +- (instancetype)init { + return [self initWithDate:NSDate.now]; +} + +- (id) initWithDate:(NSDate *)date { + NSTimeInterval timeInterval = [date timeIntervalSince1970] - UnixEpochToFITEpoch; + + double timestamp,fractionalTimeStamp; + fractionalTimeStamp = modf(timeInterval, ×tamp); + + return [self initWithTimestamp:(FITDateTime)timestamp andFractionalTimestamp:(float)fractionalTimeStamp]; +} + +- (id) initWithFITDate:(FITDate *)date { + return [self initWithTimestamp:date.timestamp andFractionalTimestamp:date.fractionalTimeStamp]; +} + +- (instancetype)initWithTimestamp:(FITDateTime)timestamp { + return [self initWithTimestamp:timestamp andFractionalTimestamp:0.0f]; +} + +- (instancetype)initWithTimestamp:(FITDateTime)timestamp andFractionalTimestamp:(float) fractionalTimestamp { + if (self = [super init]) { + _timestamp = timestamp; + _fractionalTimeStamp = fractionalTimestamp; + } + return self; +} + +- (NSDate *) getDate { + return [FITDate DateFromFITDate:self]; +} + +- (NSTimeInterval) timestampPlusFractionalTimestamp { + return (NSTimeInterval)_timestamp + (NSTimeInterval)_fractionalTimeStamp; +} + +- (NSDate *) date { + return [FITDate DateFromFITDate:self]; +} + +- (BOOL)isEqualToDate:(FITDate *)otherDate { + return self.timestampPlusFractionalTimestamp == otherDate.timestampPlusFractionalTimestamp; +} + +- (FITDate *)earlierDate:(FITDate *)otherDate { + return self.timestampPlusFractionalTimestamp > otherDate.timestampPlusFractionalTimestamp ? otherDate : self; +} + +- (FITDate *)laterDate:(FITDate *)otherDate { + return self.timestampPlusFractionalTimestamp < otherDate.timestampPlusFractionalTimestamp ? otherDate : self; +} + +- (NSComparisonResult)compare:(FITDate *)otherDate { + if (otherDate == self) + { + return NSOrderedSame; + } + if (self.timestampPlusFractionalTimestamp > otherDate.timestampPlusFractionalTimestamp) + { + return NSOrderedDescending; + } + if (self.timestampPlusFractionalTimestamp < otherDate.timestampPlusFractionalTimestamp) + { + return NSOrderedAscending; + } + return NSOrderedSame; +} + +- (NSTimeInterval)timeIntervalSinceDate:(FITDate *)otherDate { + return self.timestampPlusFractionalTimestamp - otherDate.timestampPlusFractionalTimestamp; +} + +- (instancetype)dateByAddingTimeInterval:(NSTimeInterval)ti { + + NSTimeInterval timeInterval = self.timestampPlusFractionalTimestamp + ti; + + double timestamp,fractionalTimeStamp; + fractionalTimeStamp = modf(timeInterval, ×tamp); + + return [[FITDate alloc] initWithTimestamp:timestamp andFractionalTimestamp:fractionalTimeStamp]; +} + +@end diff --git a/Sources/ObjcFIT/FITDecoder.mm b/Sources/ObjcFIT/FITDecoder.mm new file mode 100644 index 0000000..966e0c9 --- /dev/null +++ b/Sources/ObjcFIT/FITDecoder.mm @@ -0,0 +1,129 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITDecoder.h" +#import "FITString.h" +#import "FITMessage+Internal.h" +#import "FITDeveloperFieldDef.h" + +#import +#import + +#import +#import + +@interface FITDecoder () +@property (nonatomic, readwrite, assign) fit::Decode *decoder; + +- (void) onMesg:(fit::Mesg *) fit_mesg; +@end + +@implementation FITDecoder + +- (instancetype)init { + self = [super init]; + if (self) { + _decoder = new fit::Decode(); + } + return self; +} + +- (void)dealloc { + delete _decoder; + _decoder = nullptr; +} + +- (BOOL)isFIT:(NSString*)filename { + + std::fstream file; + file.open([filename UTF8String], std::ios::in | std::ios::binary); + + if (!file.is_open()) + { + return NO; + } + + return _decoder->IsFIT(file) == FITBoolTrue ? YES : NO; +} + +- (BOOL)checkIntegrity:(NSString*)filename { + + std::fstream file; + file.open([filename UTF8String], std::ios::in | std::ios::binary); + + if (!file.is_open()) + { + return NO; + } + + return _decoder->CheckIntegrity(file) == FITBoolTrue ? YES : NO; +} + +- (BOOL)decodeFile:(NSString*)filename { + + try { + std::fstream file; + file.open([filename UTF8String], std::ios::in | std::ios::binary); + + if (!file.is_open()) + { + return NO; + } + + return _decoder->Read(&file, (__bridge void*)self) == FITBoolTrue ? YES : NO; + } + catch (...) { + return NO; + } +} + +- (void)onMesg:(fit::Mesg *) fit_mesg { + [self.mesgDelegate onMesg:[[FITMessage alloc] initWithFitMesg:fit_mesg]]; + return; +} + +- (void)onMesgDefinition:(fit::MesgDefinition *) fit_mesg_definition { + //[self.mesgDefinitionDelegate onMesgDefinition:[[FITMesgDefinition alloc] initWithFitMesgDefinition:fit_mesg_definition]]; + return; +} + +- (void)onDeveloperFieldDefinition:(fit::FieldDescriptionMesg *) fit_fieldDescriptionMesg withDeveloperId:(fit::DeveloperDataIdMesg*)fit_developerDataIdMesg { + FITFieldDescriptionMesg* description = [[FITFieldDescriptionMesg alloc] initWithFitMesg:fit_fieldDescriptionMesg]; + FITDeveloperDataIdMesg* developer = [[FITDeveloperDataIdMesg alloc] initWithFitMesg:fit_developerDataIdMesg]; + FITDeveloperFieldDefinition* definition = [[FITDeveloperFieldDefinition alloc] initWithFieldDescriptionMesg:description andDeveloperDataIdMesg: developer]; + + [self.developerFieldDefinitionDelegate onDeveloperFieldDefinition:definition]; + return; +} + +void OnMesgFromDecoder (void *decoder, void *mesg) { + // Forward message to the FITDecoder + [(__bridge id) decoder onMesg:(fit::Mesg *)mesg]; + + return; +} + +void OnMesgDefinitionFromDecoder(void *decoder, void *mesgDefinition) { + // Forward message to the FITDecoder + [(__bridge id) decoder onMesgDefinition:(fit::MesgDefinition *)mesgDefinition]; + + return; +} + +void OnDeveloperFieldDefinitionFromDecoder(void *decoder, void *fieldDescriptionMesg, void *developerDataIdMesg) { + // Forward message to the FITDecoder + [(__bridge id) decoder onDeveloperFieldDefinition:(fit::FieldDescriptionMesg *)fieldDescriptionMesg withDeveloperId:(fit::DeveloperDataIdMesg*)developerDataIdMesg]; + + return; +} + +@end diff --git a/Sources/ObjcFIT/FITDeveloperDataIdMesg.mm b/Sources/ObjcFIT/FITDeveloperDataIdMesg.mm new file mode 100644 index 0000000..4b1747d --- /dev/null +++ b/Sources/ObjcFIT/FITDeveloperDataIdMesg.mm @@ -0,0 +1,124 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITDeveloperDataIdMesg.h" + +@implementation FITDeveloperDataIdMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_DEVELOPER_DATA_ID]; + + return self; +} + +// DeveloperId +- (uint8_t)numDeveloperIdValues { + return [super getFieldNumValuesForField:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isDeveloperIdValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getDeveloperIdforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:0 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeveloperId:(FITByte)developerId forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:0 andValue:(developerId) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ApplicationId +- (uint8_t)numApplicationIdValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isApplicationIdValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getApplicationIdforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setApplicationId:(FITByte)applicationId forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:1 andValue:(applicationId) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ManufacturerId +- (BOOL)isManufacturerIdValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITManufacturer)getManufacturerId { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setManufacturerId:(FITManufacturer)manufacturerId { + [super setFieldUINT16ValueForField:2 andValue:(manufacturerId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeveloperDataIndex +- (BOOL)isDeveloperDataIndexValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDeveloperDataIndex { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeveloperDataIndex:(FITUInt8)developerDataIndex { + [super setFieldUINT8ValueForField:3 andValue:(developerDataIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ApplicationVersion +- (BOOL)isApplicationVersionValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getApplicationVersion { + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setApplicationVersion:(FITUInt32)applicationVersion { + [super setFieldUINT32ValueForField:4 andValue:(applicationVersion) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITDeveloperFieldDef+Internal.h b/Sources/ObjcFIT/FITDeveloperFieldDef+Internal.h new file mode 100644 index 0000000..0583de3 --- /dev/null +++ b/Sources/ObjcFIT/FITDeveloperFieldDef+Internal.h @@ -0,0 +1,21 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITDeveloperFieldDef.h" + +#import + +@interface FITDeveloperField (Internal) + +- (fit::DeveloperField *)fit_developer_field; + +@end \ No newline at end of file diff --git a/Sources/ObjcFIT/FITDeveloperFieldDef.mm b/Sources/ObjcFIT/FITDeveloperFieldDef.mm new file mode 100644 index 0000000..51fff81 --- /dev/null +++ b/Sources/ObjcFIT/FITDeveloperFieldDef.mm @@ -0,0 +1,131 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITDeveloperFieldDef.h" +#import "FITDeveloperFieldDef+Internal.h" +#import "FITString.h" + +@interface FITDeveloperField () + +@property(nonatomic, assign) fit::DeveloperField *fit_developer_field; +@property(nonatomic, assign) FITFieldDescriptionMesg* definition; +@property(nonatomic, assign) FITDeveloperDataIdMesg* developer; + +@end + +@implementation FITDeveloperField + +- (id)initWithFieldDescriptionMesg: (FITFieldDescriptionMesg*) definition andDeveloperDataIdMesg: (FITDeveloperDataIdMesg*) developer { + + if (self = [super init]) { + self.definition = definition; + self.developer = developer; + self.fit_developer_field = [FITDeveloperField createFieldDescriptionMesgFromDefinition:definition andDeveloperDataIdMesg:developer]; + } + return self; +} + +- (void)dealloc { + delete _fit_developer_field; + _fit_developer_field = nullptr; +} + + +- (fit::DeveloperField *)fit_developer_field { + return _fit_developer_field; +} + +- (void)addValue:(NSNumber*)value forIndex:(uint8_t)index { + _fit_developer_field->AddValue([value doubleValue],index); +} + +- (NSNumber*)getValueForIndex:(uint8_t)index { + FITFloat64 rawValue = _fit_developer_field->GetRawValue(index); + + if(rawValue == FITFloat64Invalid) { + return nil; + } + + return [NSNumber numberWithDouble:rawValue]; +} + ++ (fit::DeveloperField *)createFieldDescriptionMesgFromDefinition:(FITFieldDescriptionMesg*) fitFieldDescriptionMesg andDeveloperDataIdMesg: (FITDeveloperDataIdMesg*) fitDeveloperDataIdMesg { + fit::FieldDescriptionMesg definition; + + if(fitFieldDescriptionMesg.isDeveloperDataIndexValid) { + definition.SetDeveloperDataIndex(fitFieldDescriptionMesg.getDeveloperDataIndex); + } + + if([fitFieldDescriptionMesg isFieldDefinitionNumberValid]) { + definition.SetFieldDefinitionNumber(fitFieldDescriptionMesg.getFieldDefinitionNumber); + } + + if([fitFieldDescriptionMesg isFitBaseTypeIdValid]) { + definition.SetFitBaseTypeId(fitFieldDescriptionMesg.getFitBaseTypeId); + } + + if([fitFieldDescriptionMesg isNativeFieldNumValid]) { + definition.SetNativeFieldNum(fitFieldDescriptionMesg.getNativeFieldNum); + } + + if([fitFieldDescriptionMesg isNativeMesgNumValid]) { + definition.SetNativeMesgNum(fitFieldDescriptionMesg.getNativeMesgNum); + } + + uint8_t numFieldNameValues = fitFieldDescriptionMesg.numFieldNameValues; + for(uint8_t i=0; iIsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceIndex +- (BOOL)isDeviceIndexValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDeviceIndex)getDeviceIndex { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex { + [super setFieldUINT8ValueForField:0 andValue:(deviceIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BatteryVoltage +- (BOOL)isBatteryVoltageValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBatteryVoltage { + return ([super getFieldFLOAT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBatteryVoltage:(FITFloat32)batteryVoltage { + [super setFieldFLOAT32ValueForField:1 andValue:(batteryVoltage) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BatteryStatus +- (BOOL)isBatteryStatusValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBatteryStatus)getBatteryStatus { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBatteryStatus:(FITBatteryStatus)batteryStatus { + [super setFieldUINT8ValueForField:2 andValue:(batteryStatus) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BatteryIdentifier +- (BOOL)isBatteryIdentifierValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getBatteryIdentifier { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBatteryIdentifier:(FITUInt8)batteryIdentifier { + [super setFieldUINT8ValueForField:3 andValue:(batteryIdentifier) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITDeviceInfoMesg.mm b/Sources/ObjcFIT/FITDeviceInfoMesg.mm new file mode 100644 index 0000000..c863d33 --- /dev/null +++ b/Sources/ObjcFIT/FITDeviceInfoMesg.mm @@ -0,0 +1,467 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITDeviceInfoMesg.h" + +@implementation FITDeviceInfoMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_DEVICE_INFO]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceIndex +- (BOOL)isDeviceIndexValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDeviceIndex)getDeviceIndex { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex { + [super setFieldUINT8ValueForField:0 andValue:(deviceIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceType +- (BOOL)isDeviceTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDeviceType { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceType:(FITUInt8)deviceType { + [super setFieldUINT8ValueForField:1 andValue:(deviceType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// DeviceType - Sub Fields +// AntplusDeviceType - DeviceType Field - Sub Field +- (BOOL)isAntplusDeviceTypeValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITDeviceInfoMesgDeviceTypeFieldAntplusDeviceTypeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITDeviceInfoMesgDeviceTypeFieldAntplusDeviceTypeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAntplusDeviceType)getAntplusDeviceType +{ + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FITDeviceInfoMesgDeviceTypeFieldAntplusDeviceTypeSubField]); +} + +- (void)setAntplusDeviceType:(FITAntplusDeviceType)antplusDeviceType +{ + [super setFieldUINT8ValueForField:1 andValue:(antplusDeviceType) forIndex:0 andSubFieldIndex:FITDeviceInfoMesgDeviceTypeFieldAntplusDeviceTypeSubField]; +} +// AntDeviceType - DeviceType Field - Sub Field +- (BOOL)isAntDeviceTypeValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITDeviceInfoMesgDeviceTypeFieldAntDeviceTypeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITDeviceInfoMesgDeviceTypeFieldAntDeviceTypeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAntDeviceType +{ + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FITDeviceInfoMesgDeviceTypeFieldAntDeviceTypeSubField]); +} + +- (void)setAntDeviceType:(FITUInt8)antDeviceType +{ + [super setFieldUINT8ValueForField:1 andValue:(antDeviceType) forIndex:0 andSubFieldIndex:FITDeviceInfoMesgDeviceTypeFieldAntDeviceTypeSubField]; +} + +// Manufacturer +- (BOOL)isManufacturerValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITManufacturer)getManufacturer { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setManufacturer:(FITManufacturer)manufacturer { + [super setFieldUINT16ValueForField:2 andValue:(manufacturer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SerialNumber +- (BOOL)isSerialNumberValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32z)getSerialNumber { + return ([super getFieldUINT32ZValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSerialNumber:(FITUInt32z)serialNumber { + [super setFieldUINT32ZValueForField:3 andValue:(serialNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Product +- (BOOL)isProductValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getProduct { + return ([super getFieldUINT16ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setProduct:(FITUInt16)product { + [super setFieldUINT16ValueForField:4 andValue:(product) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Product - Sub Fields +// FaveroProduct - Product Field - Sub Field +- (BOOL)isFaveroProductValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITDeviceInfoMesgProductFieldFaveroProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITDeviceInfoMesgProductFieldFaveroProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFaveroProduct)getFaveroProduct +{ + return ([super getFieldUINT16ValueForField:4 forIndex:0 andSubFieldIndex:FITDeviceInfoMesgProductFieldFaveroProductSubField]); +} + +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct +{ + [super setFieldUINT16ValueForField:4 andValue:(faveroProduct) forIndex:0 andSubFieldIndex:FITDeviceInfoMesgProductFieldFaveroProductSubField]; +} +// GarminProduct - Product Field - Sub Field +- (BOOL)isGarminProductValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITDeviceInfoMesgProductFieldGarminProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITDeviceInfoMesgProductFieldGarminProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGarminProduct)getGarminProduct +{ + return ([super getFieldUINT16ValueForField:4 forIndex:0 andSubFieldIndex:FITDeviceInfoMesgProductFieldGarminProductSubField]); +} + +- (void)setGarminProduct:(FITGarminProduct)garminProduct +{ + [super setFieldUINT16ValueForField:4 andValue:(garminProduct) forIndex:0 andSubFieldIndex:FITDeviceInfoMesgProductFieldGarminProductSubField]; +} + +// SoftwareVersion +- (BOOL)isSoftwareVersionValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSoftwareVersion { + return ([super getFieldFLOAT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSoftwareVersion:(FITFloat32)softwareVersion { + [super setFieldFLOAT32ValueForField:5 andValue:(softwareVersion) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HardwareVersion +- (BOOL)isHardwareVersionValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHardwareVersion { + return ([super getFieldUINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHardwareVersion:(FITUInt8)hardwareVersion { + [super setFieldUINT8ValueForField:6 andValue:(hardwareVersion) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CumOperatingTime +- (BOOL)isCumOperatingTimeValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCumOperatingTime { + return ([super getFieldUINT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCumOperatingTime:(FITUInt32)cumOperatingTime { + [super setFieldUINT32ValueForField:7 andValue:(cumOperatingTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BatteryVoltage +- (BOOL)isBatteryVoltageValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBatteryVoltage { + return ([super getFieldFLOAT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBatteryVoltage:(FITFloat32)batteryVoltage { + [super setFieldFLOAT32ValueForField:10 andValue:(batteryVoltage) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BatteryStatus +- (BOOL)isBatteryStatusValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBatteryStatus)getBatteryStatus { + return ([super getFieldUINT8ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBatteryStatus:(FITBatteryStatus)batteryStatus { + [super setFieldUINT8ValueForField:11 andValue:(batteryStatus) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SensorPosition +- (BOOL)isSensorPositionValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBodyLocation)getSensorPosition { + return ([super getFieldENUMValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSensorPosition:(FITBodyLocation)sensorPosition { + [super setFieldENUMValueForField:18 andValue:(sensorPosition) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Descriptor +- (BOOL)isDescriptorValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getDescriptor { + return ([super getFieldSTRINGValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDescriptor:(NSString *)descriptor { + [super setFieldSTRINGValueForField:19 andValue:(descriptor) forIndex:0]; +} + +// AntTransmissionType +- (BOOL)isAntTransmissionTypeValid { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getAntTransmissionType { + return ([super getFieldUINT8ZValueForField:20 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAntTransmissionType:(FITUInt8z)antTransmissionType { + [super setFieldUINT8ZValueForField:20 andValue:(antTransmissionType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AntDeviceNumber +- (BOOL)isAntDeviceNumberValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getAntDeviceNumber { + return ([super getFieldUINT16ZValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAntDeviceNumber:(FITUInt16z)antDeviceNumber { + [super setFieldUINT16ZValueForField:21 andValue:(antDeviceNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AntNetwork +- (BOOL)isAntNetworkValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAntNetwork)getAntNetwork { + return ([super getFieldENUMValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAntNetwork:(FITAntNetwork)antNetwork { + [super setFieldENUMValueForField:22 andValue:(antNetwork) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SourceType +- (BOOL)isSourceTypeValid { + const fit::Field* field = [super getField:25]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSourceType)getSourceType { + return ([super getFieldENUMValueForField:25 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSourceType:(FITSourceType)sourceType { + [super setFieldENUMValueForField:25 andValue:(sourceType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ProductName +- (BOOL)isProductNameValid { + const fit::Field* field = [super getField:27]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getProductName { + return ([super getFieldSTRINGValueForField:27 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setProductName:(NSString *)productName { + [super setFieldSTRINGValueForField:27 andValue:(productName) forIndex:0]; +} + +// BatteryLevel +- (BOOL)isBatteryLevelValid { + const fit::Field* field = [super getField:32]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getBatteryLevel { + return ([super getFieldUINT8ValueForField:32 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBatteryLevel:(FITUInt8)batteryLevel { + [super setFieldUINT8ValueForField:32 andValue:(batteryLevel) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITDeviceSettingsMesg.mm b/Sources/ObjcFIT/FITDeviceSettingsMesg.mm new file mode 100644 index 0000000..9171e33 --- /dev/null +++ b/Sources/ObjcFIT/FITDeviceSettingsMesg.mm @@ -0,0 +1,478 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITDeviceSettingsMesg.h" + +@implementation FITDeviceSettingsMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_DEVICE_SETTINGS]; + + return self; +} + +// ActiveTimeZone +- (BOOL)isActiveTimeZoneValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getActiveTimeZone { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActiveTimeZone:(FITUInt8)activeTimeZone { + [super setFieldUINT8ValueForField:0 andValue:(activeTimeZone) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UtcOffset +- (BOOL)isUtcOffsetValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getUtcOffset { + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUtcOffset:(FITUInt32)utcOffset { + [super setFieldUINT32ValueForField:1 andValue:(utcOffset) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeOffset +- (uint8_t)numTimeOffsetValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeOffsetValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTimeOffsetforIndex:(uint8_t)index { + return ([super getFieldUINT32ValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeOffset:(FITUInt32)timeOffset forIndex:(uint8_t)index { + [super setFieldUINT32ValueForField:2 andValue:(timeOffset) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeMode +- (uint8_t)numTimeModeValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeModeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITTimeMode)getTimeModeforIndex:(uint8_t)index { + return ([super getFieldENUMValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeMode:(FITTimeMode)timeMode forIndex:(uint8_t)index { + [super setFieldENUMValueForField:4 andValue:(timeMode) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeZoneOffset +- (uint8_t)numTimeZoneOffsetValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeZoneOffsetValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeZoneOffsetforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeZoneOffset:(FITFloat32)timeZoneOffset forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:5 andValue:(timeZoneOffset) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BacklightMode +- (BOOL)isBacklightModeValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBacklightMode)getBacklightMode { + return ([super getFieldENUMValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBacklightMode:(FITBacklightMode)backlightMode { + [super setFieldENUMValueForField:12 andValue:(backlightMode) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityTrackerEnabled +- (BOOL)isActivityTrackerEnabledValid { + const fit::Field* field = [super getField:36]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getActivityTrackerEnabled { + return ([super getFieldENUMValueForField:36 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityTrackerEnabled:(FITBool)activityTrackerEnabled { + [super setFieldENUMValueForField:36 andValue:(activityTrackerEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ClockTime +- (BOOL)isClockTimeValid { + const fit::Field* field = [super getField:39]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getClockTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:39 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setClockTime:(FITDate *)clockTime { + [super setFieldUINT32ValueForField:39 andValue:TimestampFromFITDate(clockTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PagesEnabled +- (uint8_t)numPagesEnabledValues { + return [super getFieldNumValuesForField:40 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isPagesEnabledValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:40]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getPagesEnabledforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:40 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPagesEnabled:(FITUInt16)pagesEnabled forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:40 andValue:(pagesEnabled) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MoveAlertEnabled +- (BOOL)isMoveAlertEnabledValid { + const fit::Field* field = [super getField:46]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getMoveAlertEnabled { + return ([super getFieldENUMValueForField:46 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMoveAlertEnabled:(FITBool)moveAlertEnabled { + [super setFieldENUMValueForField:46 andValue:(moveAlertEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DateMode +- (BOOL)isDateModeValid { + const fit::Field* field = [super getField:47]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDateMode)getDateMode { + return ([super getFieldENUMValueForField:47 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDateMode:(FITDateMode)dateMode { + [super setFieldENUMValueForField:47 andValue:(dateMode) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DisplayOrientation +- (BOOL)isDisplayOrientationValid { + const fit::Field* field = [super getField:55]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayOrientation)getDisplayOrientation { + return ([super getFieldENUMValueForField:55 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDisplayOrientation:(FITDisplayOrientation)displayOrientation { + [super setFieldENUMValueForField:55 andValue:(displayOrientation) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MountingSide +- (BOOL)isMountingSideValid { + const fit::Field* field = [super getField:56]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSide)getMountingSide { + return ([super getFieldENUMValueForField:56 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMountingSide:(FITSide)mountingSide { + [super setFieldENUMValueForField:56 andValue:(mountingSide) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DefaultPage +- (uint8_t)numDefaultPageValues { + return [super getFieldNumValuesForField:57 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isDefaultPageValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:57]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getDefaultPageforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:57 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDefaultPage:(FITUInt16)defaultPage forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:57 andValue:(defaultPage) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutosyncMinSteps +- (BOOL)isAutosyncMinStepsValid { + const fit::Field* field = [super getField:58]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAutosyncMinSteps { + return ([super getFieldUINT16ValueForField:58 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutosyncMinSteps:(FITUInt16)autosyncMinSteps { + [super setFieldUINT16ValueForField:58 andValue:(autosyncMinSteps) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutosyncMinTime +- (BOOL)isAutosyncMinTimeValid { + const fit::Field* field = [super getField:59]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAutosyncMinTime { + return ([super getFieldUINT16ValueForField:59 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutosyncMinTime:(FITUInt16)autosyncMinTime { + [super setFieldUINT16ValueForField:59 andValue:(autosyncMinTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LactateThresholdAutodetectEnabled +- (BOOL)isLactateThresholdAutodetectEnabledValid { + const fit::Field* field = [super getField:80]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getLactateThresholdAutodetectEnabled { + return ([super getFieldENUMValueForField:80 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLactateThresholdAutodetectEnabled:(FITBool)lactateThresholdAutodetectEnabled { + [super setFieldENUMValueForField:80 andValue:(lactateThresholdAutodetectEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BleAutoUploadEnabled +- (BOOL)isBleAutoUploadEnabledValid { + const fit::Field* field = [super getField:86]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getBleAutoUploadEnabled { + return ([super getFieldENUMValueForField:86 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBleAutoUploadEnabled:(FITBool)bleAutoUploadEnabled { + [super setFieldENUMValueForField:86 andValue:(bleAutoUploadEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutoSyncFrequency +- (BOOL)isAutoSyncFrequencyValid { + const fit::Field* field = [super getField:89]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAutoSyncFrequency)getAutoSyncFrequency { + return ([super getFieldENUMValueForField:89 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutoSyncFrequency:(FITAutoSyncFrequency)autoSyncFrequency { + [super setFieldENUMValueForField:89 andValue:(autoSyncFrequency) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AutoActivityDetect +- (BOOL)isAutoActivityDetectValid { + const fit::Field* field = [super getField:90]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAutoActivityDetect)getAutoActivityDetect { + return ([super getFieldUINT32ValueForField:90 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAutoActivityDetect:(FITAutoActivityDetect)autoActivityDetect { + [super setFieldUINT32ValueForField:90 andValue:(autoActivityDetect) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumberOfScreens +- (BOOL)isNumberOfScreensValid { + const fit::Field* field = [super getField:94]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getNumberOfScreens { + return ([super getFieldUINT8ValueForField:94 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumberOfScreens:(FITUInt8)numberOfScreens { + [super setFieldUINT8ValueForField:94 andValue:(numberOfScreens) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SmartNotificationDisplayOrientation +- (BOOL)isSmartNotificationDisplayOrientationValid { + const fit::Field* field = [super getField:95]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayOrientation)getSmartNotificationDisplayOrientation { + return ([super getFieldENUMValueForField:95 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSmartNotificationDisplayOrientation:(FITDisplayOrientation)smartNotificationDisplayOrientation { + [super setFieldENUMValueForField:95 andValue:(smartNotificationDisplayOrientation) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TapInterface +- (BOOL)isTapInterfaceValid { + const fit::Field* field = [super getField:134]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSwitch)getTapInterface { + return ([super getFieldENUMValueForField:134 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTapInterface:(FITSwitch)tapInterface { + [super setFieldENUMValueForField:134 andValue:(tapInterface) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TapSensitivity +- (BOOL)isTapSensitivityValid { + const fit::Field* field = [super getField:174]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITTapSensitivity)getTapSensitivity { + return ([super getFieldENUMValueForField:174 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTapSensitivity:(FITTapSensitivity)tapSensitivity { + [super setFieldENUMValueForField:174 andValue:(tapSensitivity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITDiveAlarmMesg.mm b/Sources/ObjcFIT/FITDiveAlarmMesg.mm new file mode 100644 index 0000000..fcd74ff --- /dev/null +++ b/Sources/ObjcFIT/FITDiveAlarmMesg.mm @@ -0,0 +1,156 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITDiveAlarmMesg.h" + +@implementation FITDiveAlarmMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_DIVE_ALARM]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Depth +- (BOOL)isDepthValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDepth { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDepth:(FITFloat32)depth { + [super setFieldFLOAT32ValueForField:0 andValue:(depth) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Time +- (BOOL)isTimeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getTime { + return ([super getFieldSINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTime:(FITSInt32)time { + [super setFieldSINT32ValueForField:1 andValue:(time) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getEnabled { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITBool)enabled { + [super setFieldENUMValueForField:2 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AlarmType +- (BOOL)isAlarmTypeValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDiveAlarmType)getAlarmType { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAlarmType:(FITDiveAlarmType)alarmType { + [super setFieldENUMValueForField:3 andValue:(alarmType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sound +- (BOOL)isSoundValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITTone)getSound { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSound:(FITTone)sound { + [super setFieldENUMValueForField:4 andValue:(sound) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DiveTypes +- (uint8_t)numDiveTypesValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isDiveTypesValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getDiveTypesforIndex:(uint8_t)index { + return ([super getFieldENUMValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDiveTypes:(FITSubSport)diveTypes forIndex:(uint8_t)index { + [super setFieldENUMValueForField:5 andValue:(diveTypes) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITDiveGasMesg.mm b/Sources/ObjcFIT/FITDiveGasMesg.mm new file mode 100644 index 0000000..735e0fb --- /dev/null +++ b/Sources/ObjcFIT/FITDiveGasMesg.mm @@ -0,0 +1,98 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITDiveGasMesg.h" + +@implementation FITDiveGasMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_DIVE_GAS]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeliumContent +- (BOOL)isHeliumContentValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHeliumContent { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeliumContent:(FITUInt8)heliumContent { + [super setFieldUINT8ValueForField:0 andValue:(heliumContent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OxygenContent +- (BOOL)isOxygenContentValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getOxygenContent { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOxygenContent:(FITUInt8)oxygenContent { + [super setFieldUINT8ValueForField:1 andValue:(oxygenContent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Status +- (BOOL)isStatusValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDiveGasStatus)getStatus { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStatus:(FITDiveGasStatus)status { + [super setFieldENUMValueForField:2 andValue:(status) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITDiveSettingsMesg.mm b/Sources/ObjcFIT/FITDiveSettingsMesg.mm new file mode 100644 index 0000000..b1d9fc7 --- /dev/null +++ b/Sources/ObjcFIT/FITDiveSettingsMesg.mm @@ -0,0 +1,472 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITDiveSettingsMesg.h" + +@implementation FITDiveSettingsMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_DIVE_SETTINGS]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:0 andValue:(name) forIndex:0]; +} + +// Model +- (BOOL)isModelValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITTissueModelType)getModel { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setModel:(FITTissueModelType)model { + [super setFieldENUMValueForField:1 andValue:(model) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GfLow +- (BOOL)isGfLowValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getGfLow { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGfLow:(FITUInt8)gfLow { + [super setFieldUINT8ValueForField:2 andValue:(gfLow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GfHigh +- (BOOL)isGfHighValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getGfHigh { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGfHigh:(FITUInt8)gfHigh { + [super setFieldUINT8ValueForField:3 andValue:(gfHigh) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WaterType +- (BOOL)isWaterTypeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWaterType)getWaterType { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWaterType:(FITWaterType)waterType { + [super setFieldENUMValueForField:4 andValue:(waterType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WaterDensity +- (BOOL)isWaterDensityValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getWaterDensity { + return ([super getFieldFLOAT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWaterDensity:(FITFloat32)waterDensity { + [super setFieldFLOAT32ValueForField:5 andValue:(waterDensity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Po2Warn +- (BOOL)isPo2WarnValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPo2Warn { + return ([super getFieldFLOAT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPo2Warn:(FITFloat32)po2Warn { + [super setFieldFLOAT32ValueForField:6 andValue:(po2Warn) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Po2Critical +- (BOOL)isPo2CriticalValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPo2Critical { + return ([super getFieldFLOAT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPo2Critical:(FITFloat32)po2Critical { + [super setFieldFLOAT32ValueForField:7 andValue:(po2Critical) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Po2Deco +- (BOOL)isPo2DecoValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPo2Deco { + return ([super getFieldFLOAT32ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPo2Deco:(FITFloat32)po2Deco { + [super setFieldFLOAT32ValueForField:8 andValue:(po2Deco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SafetyStopEnabled +- (BOOL)isSafetyStopEnabledValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getSafetyStopEnabled { + return ([super getFieldENUMValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSafetyStopEnabled:(FITBool)safetyStopEnabled { + [super setFieldENUMValueForField:9 andValue:(safetyStopEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BottomDepth +- (BOOL)isBottomDepthValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBottomDepth { + return ([super getFieldFLOAT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBottomDepth:(FITFloat32)bottomDepth { + [super setFieldFLOAT32ValueForField:10 andValue:(bottomDepth) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BottomTime +- (BOOL)isBottomTimeValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getBottomTime { + return ([super getFieldUINT32ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBottomTime:(FITUInt32)bottomTime { + [super setFieldUINT32ValueForField:11 andValue:(bottomTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ApneaCountdownEnabled +- (BOOL)isApneaCountdownEnabledValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getApneaCountdownEnabled { + return ([super getFieldENUMValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setApneaCountdownEnabled:(FITBool)apneaCountdownEnabled { + [super setFieldENUMValueForField:12 andValue:(apneaCountdownEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ApneaCountdownTime +- (BOOL)isApneaCountdownTimeValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getApneaCountdownTime { + return ([super getFieldUINT32ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setApneaCountdownTime:(FITUInt32)apneaCountdownTime { + [super setFieldUINT32ValueForField:13 andValue:(apneaCountdownTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BacklightMode +- (BOOL)isBacklightModeValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDiveBacklightMode)getBacklightMode { + return ([super getFieldENUMValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBacklightMode:(FITDiveBacklightMode)backlightMode { + [super setFieldENUMValueForField:14 andValue:(backlightMode) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BacklightBrightness +- (BOOL)isBacklightBrightnessValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getBacklightBrightness { + return ([super getFieldUINT8ValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBacklightBrightness:(FITUInt8)backlightBrightness { + [super setFieldUINT8ValueForField:15 andValue:(backlightBrightness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BacklightTimeout +- (BOOL)isBacklightTimeoutValid { + const fit::Field* field = [super getField:16]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBacklightTimeout)getBacklightTimeout { + return ([super getFieldUINT8ValueForField:16 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBacklightTimeout:(FITBacklightTimeout)backlightTimeout { + [super setFieldUINT8ValueForField:16 andValue:(backlightTimeout) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RepeatDiveInterval +- (BOOL)isRepeatDiveIntervalValid { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getRepeatDiveInterval { + return ([super getFieldUINT16ValueForField:17 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRepeatDiveInterval:(FITUInt16)repeatDiveInterval { + [super setFieldUINT16ValueForField:17 andValue:(repeatDiveInterval) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SafetyStopTime +- (BOOL)isSafetyStopTimeValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSafetyStopTime { + return ([super getFieldUINT16ValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSafetyStopTime:(FITUInt16)safetyStopTime { + [super setFieldUINT16ValueForField:18 andValue:(safetyStopTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeartRateSourceType +- (BOOL)isHeartRateSourceTypeValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSourceType)getHeartRateSourceType { + return ([super getFieldENUMValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeartRateSourceType:(FITSourceType)heartRateSourceType { + [super setFieldENUMValueForField:19 andValue:(heartRateSourceType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeartRateSource +- (BOOL)isHeartRateSourceValid { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHeartRateSource { + return ([super getFieldUINT8ValueForField:20 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeartRateSource:(FITUInt8)heartRateSource { + [super setFieldUINT8ValueForField:20 andValue:(heartRateSource) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// HeartRateSource - Sub Fields +// HeartRateAntplusDeviceType - HeartRateSource Field - Sub Field +- (BOOL)isHeartRateAntplusDeviceTypeValid +{ + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:20 supportSubField:(FITUInt16)FITDiveSettingsMesgHeartRateSourceFieldHeartRateAntplusDeviceTypeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITDiveSettingsMesgHeartRateSourceFieldHeartRateAntplusDeviceTypeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAntplusDeviceType)getHeartRateAntplusDeviceType +{ + return ([super getFieldUINT8ValueForField:20 forIndex:0 andSubFieldIndex:FITDiveSettingsMesgHeartRateSourceFieldHeartRateAntplusDeviceTypeSubField]); +} + +- (void)setHeartRateAntplusDeviceType:(FITAntplusDeviceType)heartRateAntplusDeviceType +{ + [super setFieldUINT8ValueForField:20 andValue:(heartRateAntplusDeviceType) forIndex:0 andSubFieldIndex:FITDiveSettingsMesgHeartRateSourceFieldHeartRateAntplusDeviceTypeSubField]; +} +// HeartRateLocalDeviceType - HeartRateSource Field - Sub Field +- (BOOL)isHeartRateLocalDeviceTypeValid +{ + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:20 supportSubField:(FITUInt16)FITDiveSettingsMesgHeartRateSourceFieldHeartRateLocalDeviceTypeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITDiveSettingsMesgHeartRateSourceFieldHeartRateLocalDeviceTypeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocalDeviceType)getHeartRateLocalDeviceType +{ + return ([super getFieldUINT8ValueForField:20 forIndex:0 andSubFieldIndex:FITDiveSettingsMesgHeartRateSourceFieldHeartRateLocalDeviceTypeSubField]); +} + +- (void)setHeartRateLocalDeviceType:(FITLocalDeviceType)heartRateLocalDeviceType +{ + [super setFieldUINT8ValueForField:20 andValue:(heartRateLocalDeviceType) forIndex:0 andSubFieldIndex:FITDiveSettingsMesgHeartRateSourceFieldHeartRateLocalDeviceTypeSubField]; +} + +@end diff --git a/Sources/ObjcFIT/FITDiveSummaryMesg.mm b/Sources/ObjcFIT/FITDiveSummaryMesg.mm new file mode 100644 index 0000000..954c47f --- /dev/null +++ b/Sources/ObjcFIT/FITDiveSummaryMesg.mm @@ -0,0 +1,350 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITDiveSummaryMesg.h" + +@implementation FITDiveSummaryMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_DIVE_SUMMARY]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ReferenceMesg +- (BOOL)isReferenceMesgValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMesgNum)getReferenceMesg { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setReferenceMesg:(FITMesgNum)referenceMesg { + [super setFieldUINT16ValueForField:0 andValue:(referenceMesg) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ReferenceIndex +- (BOOL)isReferenceIndexValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getReferenceIndex { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setReferenceIndex:(FITMessageIndex)referenceIndex { + [super setFieldUINT16ValueForField:1 andValue:(referenceIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgDepth +- (BOOL)isAvgDepthValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgDepth { + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgDepth:(FITFloat32)avgDepth { + [super setFieldFLOAT32ValueForField:2 andValue:(avgDepth) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxDepth +- (BOOL)isMaxDepthValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxDepth { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxDepth:(FITFloat32)maxDepth { + [super setFieldFLOAT32ValueForField:3 andValue:(maxDepth) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SurfaceInterval +- (BOOL)isSurfaceIntervalValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSurfaceInterval { + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSurfaceInterval:(FITUInt32)surfaceInterval { + [super setFieldUINT32ValueForField:4 andValue:(surfaceInterval) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartCns +- (BOOL)isStartCnsValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getStartCns { + return ([super getFieldUINT8ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartCns:(FITUInt8)startCns { + [super setFieldUINT8ValueForField:5 andValue:(startCns) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndCns +- (BOOL)isEndCnsValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEndCns { + return ([super getFieldUINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndCns:(FITUInt8)endCns { + [super setFieldUINT8ValueForField:6 andValue:(endCns) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartN2 +- (BOOL)isStartN2Valid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStartN2 { + return ([super getFieldUINT16ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartN2:(FITUInt16)startN2 { + [super setFieldUINT16ValueForField:7 andValue:(startN2) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndN2 +- (BOOL)isEndN2Valid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getEndN2 { + return ([super getFieldUINT16ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndN2:(FITUInt16)endN2 { + [super setFieldUINT16ValueForField:8 andValue:(endN2) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// O2Toxicity +- (BOOL)isO2ToxicityValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getO2Toxicity { + return ([super getFieldUINT16ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setO2Toxicity:(FITUInt16)o2Toxicity { + [super setFieldUINT16ValueForField:9 andValue:(o2Toxicity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DiveNumber +- (BOOL)isDiveNumberValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDiveNumber { + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDiveNumber:(FITUInt32)diveNumber { + [super setFieldUINT32ValueForField:10 andValue:(diveNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BottomTime +- (BOOL)isBottomTimeValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBottomTime { + return ([super getFieldFLOAT32ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBottomTime:(FITFloat32)bottomTime { + [super setFieldFLOAT32ValueForField:11 andValue:(bottomTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgAscentRate +- (BOOL)isAvgAscentRateValid { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgAscentRate { + return ([super getFieldFLOAT32ValueForField:17 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgAscentRate:(FITFloat32)avgAscentRate { + [super setFieldFLOAT32ValueForField:17 andValue:(avgAscentRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgDescentRate +- (BOOL)isAvgDescentRateValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgDescentRate { + return ([super getFieldFLOAT32ValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgDescentRate:(FITFloat32)avgDescentRate { + [super setFieldFLOAT32ValueForField:22 andValue:(avgDescentRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxAscentRate +- (BOOL)isMaxAscentRateValid { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxAscentRate { + return ([super getFieldFLOAT32ValueForField:23 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxAscentRate:(FITFloat32)maxAscentRate { + [super setFieldFLOAT32ValueForField:23 andValue:(maxAscentRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxDescentRate +- (BOOL)isMaxDescentRateValid { + const fit::Field* field = [super getField:24]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxDescentRate { + return ([super getFieldFLOAT32ValueForField:24 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxDescentRate:(FITFloat32)maxDescentRate { + [super setFieldFLOAT32ValueForField:24 andValue:(maxDescentRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HangTime +- (BOOL)isHangTimeValid { + const fit::Field* field = [super getField:25]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getHangTime { + return ([super getFieldFLOAT32ValueForField:25 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHangTime:(FITFloat32)hangTime { + [super setFieldFLOAT32ValueForField:25 andValue:(hangTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITEncoder.mm b/Sources/ObjcFIT/FITEncoder.mm new file mode 100644 index 0000000..6b626d0 --- /dev/null +++ b/Sources/ObjcFIT/FITEncoder.mm @@ -0,0 +1,86 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import +#import + +#import "FITEncoder.h" + +#import "FITMessage+Internal.h" + +@interface FITEncoder () +@property (nonatomic, readwrite, assign) fit::Encode *encoder; +@property (nonatomic, readwrite, assign) std::fstream *file; +@end + +@implementation FITEncoder + +-(instancetype)initWithVersion:(FITProtocolVersion)version { + self = [super init]; + if (self) { + _encoder = new fit::Encode(version == FITProtocolVersionV20 ? fit::ProtocolVersion::V20 : fit::ProtocolVersion::V10 ); + } + return self; +} + +-(void)dealloc { + delete _encoder; + _encoder = nullptr; + + [self closeFile]; +} + +-(BOOL)open:(NSString *)filename { + _file = new std::fstream(); + _file->open(filename.UTF8String, std::ios::in | std::ios::out | std::ios::binary | std::ios::trunc); + + if(!_file->is_open()) { + return NO; + } + + _encoder->Open(*_file); + + return YES; +} + + +-(void)writeMessage:(FITMessage *)message { + fit::Mesg *mesg = [message getInternalFitMesg]; + _encoder->Write(*mesg); +} + +- (void)writeMessages:(NSArray*)mesgs { + for (id mesg in mesgs) { + [self writeMessage:mesg]; + } +} + +-(BOOL)close { + FIT_BOOL retval = _encoder->Close(); + + [self closeFile]; + + return retval == FIT_TRUE ? YES : NO; +} + +-(void)closeFile { + if (_file != nullptr) { + if (_file->is_open()) { + _file->close(); + } + + delete _file; + _file = nullptr; + } +} + +@end diff --git a/Sources/ObjcFIT/FITEventMesg.mm b/Sources/ObjcFIT/FITEventMesg.mm new file mode 100644 index 0000000..b27b231 --- /dev/null +++ b/Sources/ObjcFIT/FITEventMesg.mm @@ -0,0 +1,837 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITEventMesg.h" + +@implementation FITEventMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_EVENT]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Event +- (BOOL)isEventValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEvent)getEvent { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEvent:(FITEvent)event { + [super setFieldENUMValueForField:0 andValue:(event) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventType +- (BOOL)isEventTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEventType)getEventType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventType:(FITEventType)eventType { + [super setFieldENUMValueForField:1 andValue:(eventType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Data16 +- (BOOL)isData16Valid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getData16 { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setData16:(FITUInt16)data16 { + [super setFieldUINT16ValueForField:2 andValue:(data16) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Data +- (BOOL)isDataValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getData { + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setData:(FITUInt32)data { + [super setFieldUINT32ValueForField:3 andValue:(data) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Data - Sub Fields +// TimerTrigger - Data Field - Sub Field +- (BOOL)isTimerTriggerValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldTimerTriggerSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldTimerTriggerSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITTimerTrigger)getTimerTrigger +{ + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldTimerTriggerSubField]); +} + +- (void)setTimerTrigger:(FITTimerTrigger)timerTrigger +{ + [super setFieldENUMValueForField:3 andValue:(timerTrigger) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldTimerTriggerSubField]; +} +// CoursePointIndex - Data Field - Sub Field +- (BOOL)isCoursePointIndexValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldCoursePointIndexSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldCoursePointIndexSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getCoursePointIndex +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCoursePointIndexSubField]); +} + +- (void)setCoursePointIndex:(FITMessageIndex)coursePointIndex +{ + [super setFieldUINT16ValueForField:3 andValue:(coursePointIndex) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCoursePointIndexSubField]; +} +// BatteryLevel - Data Field - Sub Field +- (BOOL)isBatteryLevelValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldBatteryLevelSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldBatteryLevelSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBatteryLevel +{ + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldBatteryLevelSubField]); +} + +- (void)setBatteryLevel:(FITFloat32)batteryLevel +{ + [super setFieldFLOAT32ValueForField:3 andValue:(batteryLevel) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldBatteryLevelSubField]; +} +// VirtualPartnerSpeed - Data Field - Sub Field +- (BOOL)isVirtualPartnerSpeedValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldVirtualPartnerSpeedSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldVirtualPartnerSpeedSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getVirtualPartnerSpeed +{ + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldVirtualPartnerSpeedSubField]); +} + +- (void)setVirtualPartnerSpeed:(FITFloat32)virtualPartnerSpeed +{ + [super setFieldFLOAT32ValueForField:3 andValue:(virtualPartnerSpeed) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldVirtualPartnerSpeedSubField]; +} +// HrHighAlert - Data Field - Sub Field +- (BOOL)isHrHighAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldHrHighAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldHrHighAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHrHighAlert +{ + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldHrHighAlertSubField]); +} + +- (void)setHrHighAlert:(FITUInt8)hrHighAlert +{ + [super setFieldUINT8ValueForField:3 andValue:(hrHighAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldHrHighAlertSubField]; +} +// HrLowAlert - Data Field - Sub Field +- (BOOL)isHrLowAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldHrLowAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldHrLowAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHrLowAlert +{ + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldHrLowAlertSubField]); +} + +- (void)setHrLowAlert:(FITUInt8)hrLowAlert +{ + [super setFieldUINT8ValueForField:3 andValue:(hrLowAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldHrLowAlertSubField]; +} +// SpeedHighAlert - Data Field - Sub Field +- (BOOL)isSpeedHighAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldSpeedHighAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldSpeedHighAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSpeedHighAlert +{ + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldSpeedHighAlertSubField]); +} + +- (void)setSpeedHighAlert:(FITFloat32)speedHighAlert +{ + [super setFieldFLOAT32ValueForField:3 andValue:(speedHighAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldSpeedHighAlertSubField]; +} +// SpeedLowAlert - Data Field - Sub Field +- (BOOL)isSpeedLowAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldSpeedLowAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldSpeedLowAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSpeedLowAlert +{ + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldSpeedLowAlertSubField]); +} + +- (void)setSpeedLowAlert:(FITFloat32)speedLowAlert +{ + [super setFieldFLOAT32ValueForField:3 andValue:(speedLowAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldSpeedLowAlertSubField]; +} +// CadHighAlert - Data Field - Sub Field +- (BOOL)isCadHighAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldCadHighAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldCadHighAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCadHighAlert +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCadHighAlertSubField]); +} + +- (void)setCadHighAlert:(FITUInt16)cadHighAlert +{ + [super setFieldUINT16ValueForField:3 andValue:(cadHighAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCadHighAlertSubField]; +} +// CadLowAlert - Data Field - Sub Field +- (BOOL)isCadLowAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldCadLowAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldCadLowAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCadLowAlert +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCadLowAlertSubField]); +} + +- (void)setCadLowAlert:(FITUInt16)cadLowAlert +{ + [super setFieldUINT16ValueForField:3 andValue:(cadLowAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCadLowAlertSubField]; +} +// PowerHighAlert - Data Field - Sub Field +- (BOOL)isPowerHighAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldPowerHighAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldPowerHighAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getPowerHighAlert +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldPowerHighAlertSubField]); +} + +- (void)setPowerHighAlert:(FITUInt16)powerHighAlert +{ + [super setFieldUINT16ValueForField:3 andValue:(powerHighAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldPowerHighAlertSubField]; +} +// PowerLowAlert - Data Field - Sub Field +- (BOOL)isPowerLowAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldPowerLowAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldPowerLowAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getPowerLowAlert +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldPowerLowAlertSubField]); +} + +- (void)setPowerLowAlert:(FITUInt16)powerLowAlert +{ + [super setFieldUINT16ValueForField:3 andValue:(powerLowAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldPowerLowAlertSubField]; +} +// TimeDurationAlert - Data Field - Sub Field +- (BOOL)isTimeDurationAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldTimeDurationAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldTimeDurationAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeDurationAlert +{ + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldTimeDurationAlertSubField]); +} + +- (void)setTimeDurationAlert:(FITFloat32)timeDurationAlert +{ + [super setFieldFLOAT32ValueForField:3 andValue:(timeDurationAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldTimeDurationAlertSubField]; +} +// DistanceDurationAlert - Data Field - Sub Field +- (BOOL)isDistanceDurationAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldDistanceDurationAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldDistanceDurationAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDistanceDurationAlert +{ + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldDistanceDurationAlertSubField]); +} + +- (void)setDistanceDurationAlert:(FITFloat32)distanceDurationAlert +{ + [super setFieldFLOAT32ValueForField:3 andValue:(distanceDurationAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldDistanceDurationAlertSubField]; +} +// CalorieDurationAlert - Data Field - Sub Field +- (BOOL)isCalorieDurationAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldCalorieDurationAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldCalorieDurationAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCalorieDurationAlert +{ + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCalorieDurationAlertSubField]); +} + +- (void)setCalorieDurationAlert:(FITUInt32)calorieDurationAlert +{ + [super setFieldUINT32ValueForField:3 andValue:(calorieDurationAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCalorieDurationAlertSubField]; +} +// FitnessEquipmentState - Data Field - Sub Field +- (BOOL)isFitnessEquipmentStateValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldFitnessEquipmentStateSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldFitnessEquipmentStateSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFitnessEquipmentState)getFitnessEquipmentState +{ + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldFitnessEquipmentStateSubField]); +} + +- (void)setFitnessEquipmentState:(FITFitnessEquipmentState)fitnessEquipmentState +{ + [super setFieldENUMValueForField:3 andValue:(fitnessEquipmentState) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldFitnessEquipmentStateSubField]; +} +// SportPoint - Data Field - Sub Field +- (BOOL)isSportPointValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldSportPointSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldSportPointSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSportPoint +{ + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldSportPointSubField]); +} + +- (void)setSportPoint:(FITUInt32)sportPoint +{ + [super setFieldUINT32ValueForField:3 andValue:(sportPoint) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldSportPointSubField]; +} +// GearChangeData - Data Field - Sub Field +- (BOOL)isGearChangeDataValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldGearChangeDataSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldGearChangeDataSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getGearChangeData +{ + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldGearChangeDataSubField]); +} + +- (void)setGearChangeData:(FITUInt32)gearChangeData +{ + [super setFieldUINT32ValueForField:3 andValue:(gearChangeData) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldGearChangeDataSubField]; +} +// RiderPosition - Data Field - Sub Field +- (BOOL)isRiderPositionValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldRiderPositionSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldRiderPositionSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITRiderPositionType)getRiderPosition +{ + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldRiderPositionSubField]); +} + +- (void)setRiderPosition:(FITRiderPositionType)riderPosition +{ + [super setFieldENUMValueForField:3 andValue:(riderPosition) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldRiderPositionSubField]; +} +// CommTimeout - Data Field - Sub Field +- (BOOL)isCommTimeoutValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldCommTimeoutSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldCommTimeoutSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITCommTimeoutType)getCommTimeout +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCommTimeoutSubField]); +} + +- (void)setCommTimeout:(FITCommTimeoutType)commTimeout +{ + [super setFieldUINT16ValueForField:3 andValue:(commTimeout) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldCommTimeoutSubField]; +} +// RadarThreatAlert - Data Field - Sub Field +- (BOOL)isRadarThreatAlertValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITEventMesgDataFieldRadarThreatAlertSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITEventMesgDataFieldRadarThreatAlertSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getRadarThreatAlert +{ + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FITEventMesgDataFieldRadarThreatAlertSubField]); +} + +- (void)setRadarThreatAlert:(FITUInt32)radarThreatAlert +{ + [super setFieldUINT32ValueForField:3 andValue:(radarThreatAlert) forIndex:0 andSubFieldIndex:FITEventMesgDataFieldRadarThreatAlertSubField]; +} + +// EventGroup +- (BOOL)isEventGroupValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEventGroup { + return ([super getFieldUINT8ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventGroup:(FITUInt8)eventGroup { + [super setFieldUINT8ValueForField:4 andValue:(eventGroup) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Score +- (BOOL)isScoreValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getScore { + return ([super getFieldUINT16ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScore:(FITUInt16)score { + [super setFieldUINT16ValueForField:7 andValue:(score) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OpponentScore +- (BOOL)isOpponentScoreValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getOpponentScore { + return ([super getFieldUINT16ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOpponentScore:(FITUInt16)opponentScore { + [super setFieldUINT16ValueForField:8 andValue:(opponentScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FrontGearNum +- (BOOL)isFrontGearNumValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getFrontGearNum { + return ([super getFieldUINT8ZValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFrontGearNum:(FITUInt8z)frontGearNum { + [super setFieldUINT8ZValueForField:9 andValue:(frontGearNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FrontGear +- (BOOL)isFrontGearValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getFrontGear { + return ([super getFieldUINT8ZValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFrontGear:(FITUInt8z)frontGear { + [super setFieldUINT8ZValueForField:10 andValue:(frontGear) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RearGearNum +- (BOOL)isRearGearNumValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getRearGearNum { + return ([super getFieldUINT8ZValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRearGearNum:(FITUInt8z)rearGearNum { + [super setFieldUINT8ZValueForField:11 andValue:(rearGearNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RearGear +- (BOOL)isRearGearValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getRearGear { + return ([super getFieldUINT8ZValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRearGear:(FITUInt8z)rearGear { + [super setFieldUINT8ZValueForField:12 andValue:(rearGear) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceIndex +- (BOOL)isDeviceIndexValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDeviceIndex)getDeviceIndex { + return ([super getFieldUINT8ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex { + [super setFieldUINT8ValueForField:13 andValue:(deviceIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RadarThreatLevelMax +- (BOOL)isRadarThreatLevelMaxValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITRadarThreatLevelType)getRadarThreatLevelMax { + return ([super getFieldENUMValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRadarThreatLevelMax:(FITRadarThreatLevelType)radarThreatLevelMax { + [super setFieldENUMValueForField:21 andValue:(radarThreatLevelMax) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RadarThreatCount +- (BOOL)isRadarThreatCountValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getRadarThreatCount { + return ([super getFieldUINT8ValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRadarThreatCount:(FITUInt8)radarThreatCount { + [super setFieldUINT8ValueForField:22 andValue:(radarThreatCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RadarThreatAvgApproachSpeed +- (BOOL)isRadarThreatAvgApproachSpeedValid { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRadarThreatAvgApproachSpeed { + return ([super getFieldFLOAT32ValueForField:23 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRadarThreatAvgApproachSpeed:(FITFloat32)radarThreatAvgApproachSpeed { + [super setFieldFLOAT32ValueForField:23 andValue:(radarThreatAvgApproachSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RadarThreatMaxApproachSpeed +- (BOOL)isRadarThreatMaxApproachSpeedValid { + const fit::Field* field = [super getField:24]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRadarThreatMaxApproachSpeed { + return ([super getFieldFLOAT32ValueForField:24 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRadarThreatMaxApproachSpeed:(FITFloat32)radarThreatMaxApproachSpeed { + [super setFieldFLOAT32ValueForField:24 andValue:(radarThreatMaxApproachSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITExdDataConceptConfigurationMesg.mm b/Sources/ObjcFIT/FITExdDataConceptConfigurationMesg.mm new file mode 100644 index 0000000..91252bf --- /dev/null +++ b/Sources/ObjcFIT/FITExdDataConceptConfigurationMesg.mm @@ -0,0 +1,224 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITExdDataConceptConfigurationMesg.h" + +@implementation FITExdDataConceptConfigurationMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_EXD_DATA_CONCEPT_CONFIGURATION]; + + return self; +} + +// ScreenIndex +- (BOOL)isScreenIndexValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getScreenIndex { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScreenIndex:(FITUInt8)screenIndex { + [super setFieldUINT8ValueForField:0 andValue:(screenIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ConceptField +- (BOOL)isConceptFieldValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getConceptField { + return ([super getFieldBYTEValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setConceptField:(FITByte)conceptField { + [super setFieldBYTEValueForField:1 andValue:(conceptField) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FieldId +- (BOOL)isFieldIdValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getFieldId { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFieldId:(FITUInt8)fieldId { + [super setFieldUINT8ValueForField:2 andValue:(fieldId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ConceptIndex +- (BOOL)isConceptIndexValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getConceptIndex { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setConceptIndex:(FITUInt8)conceptIndex { + [super setFieldUINT8ValueForField:3 andValue:(conceptIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DataPage +- (BOOL)isDataPageValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDataPage { + return ([super getFieldUINT8ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDataPage:(FITUInt8)dataPage { + [super setFieldUINT8ValueForField:4 andValue:(dataPage) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ConceptKey +- (BOOL)isConceptKeyValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getConceptKey { + return ([super getFieldUINT8ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setConceptKey:(FITUInt8)conceptKey { + [super setFieldUINT8ValueForField:5 andValue:(conceptKey) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Scaling +- (BOOL)isScalingValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getScaling { + return ([super getFieldUINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScaling:(FITUInt8)scaling { + [super setFieldUINT8ValueForField:6 andValue:(scaling) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DataUnits +- (BOOL)isDataUnitsValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExdDataUnits)getDataUnits { + return ([super getFieldENUMValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDataUnits:(FITExdDataUnits)dataUnits { + [super setFieldENUMValueForField:8 andValue:(dataUnits) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Qualifier +- (BOOL)isQualifierValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExdQualifiers)getQualifier { + return ([super getFieldENUMValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setQualifier:(FITExdQualifiers)qualifier { + [super setFieldENUMValueForField:9 andValue:(qualifier) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Descriptor +- (BOOL)isDescriptorValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExdDescriptors)getDescriptor { + return ([super getFieldENUMValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDescriptor:(FITExdDescriptors)descriptor { + [super setFieldENUMValueForField:10 andValue:(descriptor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// IsSigned +- (BOOL)isIsSignedValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getIsSigned { + return ([super getFieldENUMValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setIsSigned:(FITBool)isSigned { + [super setFieldENUMValueForField:11 andValue:(isSigned) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITExdDataFieldConfigurationMesg.mm b/Sources/ObjcFIT/FITExdDataFieldConfigurationMesg.mm new file mode 100644 index 0000000..75ec255 --- /dev/null +++ b/Sources/ObjcFIT/FITExdDataFieldConfigurationMesg.mm @@ -0,0 +1,139 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITExdDataFieldConfigurationMesg.h" + +@implementation FITExdDataFieldConfigurationMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_EXD_DATA_FIELD_CONFIGURATION]; + + return self; +} + +// ScreenIndex +- (BOOL)isScreenIndexValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getScreenIndex { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScreenIndex:(FITUInt8)screenIndex { + [super setFieldUINT8ValueForField:0 andValue:(screenIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ConceptField +- (BOOL)isConceptFieldValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getConceptField { + return ([super getFieldBYTEValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setConceptField:(FITByte)conceptField { + [super setFieldBYTEValueForField:1 andValue:(conceptField) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FieldId +- (BOOL)isFieldIdValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getFieldId { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFieldId:(FITUInt8)fieldId { + [super setFieldUINT8ValueForField:2 andValue:(fieldId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ConceptCount +- (BOOL)isConceptCountValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getConceptCount { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setConceptCount:(FITUInt8)conceptCount { + [super setFieldUINT8ValueForField:3 andValue:(conceptCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DisplayType +- (BOOL)isDisplayTypeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExdDisplayType)getDisplayType { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDisplayType:(FITExdDisplayType)displayType { + [super setFieldENUMValueForField:4 andValue:(displayType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Title +- (uint8_t)numTitleValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTitleValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getTitleforIndex:(uint8_t)index { + return ([super getFieldSTRINGValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTitle:(NSString *)title forIndex:(uint8_t)index { + [super setFieldSTRINGValueForField:5 andValue:(title) forIndex:index]; +} + +@end diff --git a/Sources/ObjcFIT/FITExdScreenConfigurationMesg.mm b/Sources/ObjcFIT/FITExdScreenConfigurationMesg.mm new file mode 100644 index 0000000..7780e03 --- /dev/null +++ b/Sources/ObjcFIT/FITExdScreenConfigurationMesg.mm @@ -0,0 +1,98 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITExdScreenConfigurationMesg.h" + +@implementation FITExdScreenConfigurationMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_EXD_SCREEN_CONFIGURATION]; + + return self; +} + +// ScreenIndex +- (BOOL)isScreenIndexValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getScreenIndex { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScreenIndex:(FITUInt8)screenIndex { + [super setFieldUINT8ValueForField:0 andValue:(screenIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FieldCount +- (BOOL)isFieldCountValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getFieldCount { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFieldCount:(FITUInt8)fieldCount { + [super setFieldUINT8ValueForField:1 andValue:(fieldCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Layout +- (BOOL)isLayoutValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExdLayout)getLayout { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLayout:(FITExdLayout)layout { + [super setFieldENUMValueForField:2 andValue:(layout) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ScreenEnabled +- (BOOL)isScreenEnabledValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getScreenEnabled { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScreenEnabled:(FITBool)screenEnabled { + [super setFieldENUMValueForField:3 andValue:(screenEnabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITExerciseTitleMesg.mm b/Sources/ObjcFIT/FITExerciseTitleMesg.mm new file mode 100644 index 0000000..cbe4774 --- /dev/null +++ b/Sources/ObjcFIT/FITExerciseTitleMesg.mm @@ -0,0 +1,103 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITExerciseTitleMesg.h" + +@implementation FITExerciseTitleMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_EXERCISE_TITLE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ExerciseCategory +- (BOOL)isExerciseCategoryValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExerciseCategory)getExerciseCategory { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setExerciseCategory:(FITExerciseCategory)exerciseCategory { + [super setFieldUINT16ValueForField:0 andValue:(exerciseCategory) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ExerciseName +- (BOOL)isExerciseNameValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getExerciseName { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setExerciseName:(FITUInt16)exerciseName { + [super setFieldUINT16ValueForField:1 andValue:(exerciseName) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WktStepName +- (uint8_t)numWktStepNameValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isWktStepNameValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getWktStepNameforIndex:(uint8_t)index { + return ([super getFieldSTRINGValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWktStepName:(NSString *)wktStepName forIndex:(uint8_t)index { + [super setFieldSTRINGValueForField:2 andValue:(wktStepName) forIndex:index]; +} + +@end diff --git a/Sources/ObjcFIT/FITFieldCapabilitiesMesg.mm b/Sources/ObjcFIT/FITFieldCapabilitiesMesg.mm new file mode 100644 index 0000000..e3fdf13 --- /dev/null +++ b/Sources/ObjcFIT/FITFieldCapabilitiesMesg.mm @@ -0,0 +1,116 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITFieldCapabilitiesMesg.h" + +@implementation FITFieldCapabilitiesMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_FIELD_CAPABILITIES]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// File +- (BOOL)isFileValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFile)getFile { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFile:(FITFile)file { + [super setFieldENUMValueForField:0 andValue:(file) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MesgNum +- (BOOL)isMesgNumValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMesgNum)getMesgNum { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMesgNum:(FITMesgNum)mesgNum { + [super setFieldUINT16ValueForField:1 andValue:(mesgNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FieldNum +- (BOOL)isFieldNumValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getFieldNum { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFieldNum:(FITUInt8)fieldNum { + [super setFieldUINT8ValueForField:2 andValue:(fieldNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Count +- (BOOL)isCountValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCount { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCount:(FITUInt16)count { + [super setFieldUINT16ValueForField:3 andValue:(count) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITFieldDescriptionMesg.mm b/Sources/ObjcFIT/FITFieldDescriptionMesg.mm new file mode 100644 index 0000000..2cda57a --- /dev/null +++ b/Sources/ObjcFIT/FITFieldDescriptionMesg.mm @@ -0,0 +1,287 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITFieldDescriptionMesg.h" + +@implementation FITFieldDescriptionMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_FIELD_DESCRIPTION]; + + return self; +} + +// DeveloperDataIndex +- (BOOL)isDeveloperDataIndexValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDeveloperDataIndex { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeveloperDataIndex:(FITUInt8)developerDataIndex { + [super setFieldUINT8ValueForField:0 andValue:(developerDataIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FieldDefinitionNumber +- (BOOL)isFieldDefinitionNumberValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getFieldDefinitionNumber { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFieldDefinitionNumber:(FITUInt8)fieldDefinitionNumber { + [super setFieldUINT8ValueForField:1 andValue:(fieldDefinitionNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FitBaseTypeId +- (BOOL)isFitBaseTypeIdValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFitBaseType)getFitBaseTypeId { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFitBaseTypeId:(FITFitBaseType)fitBaseTypeId { + [super setFieldUINT8ValueForField:2 andValue:(fitBaseTypeId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FieldName +- (uint8_t)numFieldNameValues { + return [super getFieldNumValuesForField:3 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isFieldNameValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getFieldNameforIndex:(uint8_t)index { + return ([super getFieldSTRINGValueForField:3 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFieldName:(NSString *)fieldName forIndex:(uint8_t)index { + [super setFieldSTRINGValueForField:3 andValue:(fieldName) forIndex:index]; +} + +// Array +- (BOOL)isArrayValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getArray { + return ([super getFieldUINT8ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setArray:(FITUInt8)array { + [super setFieldUINT8ValueForField:4 andValue:(array) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Components +- (BOOL)isComponentsValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getComponents { + return ([super getFieldSTRINGValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setComponents:(NSString *)components { + [super setFieldSTRINGValueForField:5 andValue:(components) forIndex:0]; +} + +// Scale +- (BOOL)isScaleValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getScale { + return ([super getFieldUINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScale:(FITUInt8)scale { + [super setFieldUINT8ValueForField:6 andValue:(scale) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Offset +- (BOOL)isOffsetValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getOffset { + return ([super getFieldSINT8ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOffset:(FITSInt8)offset { + [super setFieldSINT8ValueForField:7 andValue:(offset) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Units +- (uint8_t)numUnitsValues { + return [super getFieldNumValuesForField:8 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isUnitsValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getUnitsforIndex:(uint8_t)index { + return ([super getFieldSTRINGValueForField:8 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUnits:(NSString *)units forIndex:(uint8_t)index { + [super setFieldSTRINGValueForField:8 andValue:(units) forIndex:index]; +} + +// Bits +- (BOOL)isBitsValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getBits { + return ([super getFieldSTRINGValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBits:(NSString *)bits { + [super setFieldSTRINGValueForField:9 andValue:(bits) forIndex:0]; +} + +// Accumulate +- (BOOL)isAccumulateValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getAccumulate { + return ([super getFieldSTRINGValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAccumulate:(NSString *)accumulate { + [super setFieldSTRINGValueForField:10 andValue:(accumulate) forIndex:0]; +} + +// FitBaseUnitId +- (BOOL)isFitBaseUnitIdValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFitBaseUnit)getFitBaseUnitId { + return ([super getFieldUINT16ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFitBaseUnitId:(FITFitBaseUnit)fitBaseUnitId { + [super setFieldUINT16ValueForField:13 andValue:(fitBaseUnitId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NativeMesgNum +- (BOOL)isNativeMesgNumValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMesgNum)getNativeMesgNum { + return ([super getFieldUINT16ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNativeMesgNum:(FITMesgNum)nativeMesgNum { + [super setFieldUINT16ValueForField:14 andValue:(nativeMesgNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NativeFieldNum +- (BOOL)isNativeFieldNumValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getNativeFieldNum { + return ([super getFieldUINT8ValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNativeFieldNum:(FITUInt8)nativeFieldNum { + [super setFieldUINT8ValueForField:15 andValue:(nativeFieldNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITFileCapabilitiesMesg.mm b/Sources/ObjcFIT/FITFileCapabilitiesMesg.mm new file mode 100644 index 0000000..ef25dbb --- /dev/null +++ b/Sources/ObjcFIT/FITFileCapabilitiesMesg.mm @@ -0,0 +1,135 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITFileCapabilitiesMesg.h" + +@implementation FITFileCapabilitiesMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_FILE_CAPABILITIES]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFile)getType { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITFile)type { + [super setFieldENUMValueForField:0 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Flags +- (BOOL)isFlagsValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFileFlags)getFlags { + return ([super getFieldUINT8ZValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFlags:(FITFileFlags)flags { + [super setFieldUINT8ZValueForField:1 andValue:(flags) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Directory +- (BOOL)isDirectoryValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getDirectory { + return ([super getFieldSTRINGValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDirectory:(NSString *)directory { + [super setFieldSTRINGValueForField:2 andValue:(directory) forIndex:0]; +} + +// MaxCount +- (BOOL)isMaxCountValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxCount { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCount:(FITUInt16)maxCount { + [super setFieldUINT16ValueForField:3 andValue:(maxCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxSize +- (BOOL)isMaxSizeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getMaxSize { + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxSize:(FITUInt32)maxSize { + [super setFieldUINT32ValueForField:4 andValue:(maxSize) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITFileCreatorMesg.mm b/Sources/ObjcFIT/FITFileCreatorMesg.mm new file mode 100644 index 0000000..7995618 --- /dev/null +++ b/Sources/ObjcFIT/FITFileCreatorMesg.mm @@ -0,0 +1,62 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITFileCreatorMesg.h" + +@implementation FITFileCreatorMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_FILE_CREATOR]; + + return self; +} + +// SoftwareVersion +- (BOOL)isSoftwareVersionValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSoftwareVersion { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSoftwareVersion:(FITUInt16)softwareVersion { + [super setFieldUINT16ValueForField:0 andValue:(softwareVersion) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HardwareVersion +- (BOOL)isHardwareVersionValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHardwareVersion { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHardwareVersion:(FITUInt8)hardwareVersion { + [super setFieldUINT8ValueForField:1 andValue:(hardwareVersion) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITFileIdMesg.mm b/Sources/ObjcFIT/FITFileIdMesg.mm new file mode 100644 index 0000000..08e0f1f --- /dev/null +++ b/Sources/ObjcFIT/FITFileIdMesg.mm @@ -0,0 +1,202 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITFileIdMesg.h" + +@implementation FITFileIdMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_FILE_ID]; + + return self; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFile)getType { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITFile)type { + [super setFieldENUMValueForField:0 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Manufacturer +- (BOOL)isManufacturerValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITManufacturer)getManufacturer { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setManufacturer:(FITManufacturer)manufacturer { + [super setFieldUINT16ValueForField:1 andValue:(manufacturer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Product +- (BOOL)isProductValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getProduct { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setProduct:(FITUInt16)product { + [super setFieldUINT16ValueForField:2 andValue:(product) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Product - Sub Fields +// FaveroProduct - Product Field - Sub Field +- (BOOL)isFaveroProductValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITFileIdMesgProductFieldFaveroProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITFileIdMesgProductFieldFaveroProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFaveroProduct)getFaveroProduct +{ + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FITFileIdMesgProductFieldFaveroProductSubField]); +} + +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct +{ + [super setFieldUINT16ValueForField:2 andValue:(faveroProduct) forIndex:0 andSubFieldIndex:FITFileIdMesgProductFieldFaveroProductSubField]; +} +// GarminProduct - Product Field - Sub Field +- (BOOL)isGarminProductValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITFileIdMesgProductFieldGarminProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITFileIdMesgProductFieldGarminProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGarminProduct)getGarminProduct +{ + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FITFileIdMesgProductFieldGarminProductSubField]); +} + +- (void)setGarminProduct:(FITGarminProduct)garminProduct +{ + [super setFieldUINT16ValueForField:2 andValue:(garminProduct) forIndex:0 andSubFieldIndex:FITFileIdMesgProductFieldGarminProductSubField]; +} + +// SerialNumber +- (BOOL)isSerialNumberValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32z)getSerialNumber { + return ([super getFieldUINT32ZValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSerialNumber:(FITUInt32z)serialNumber { + [super setFieldUINT32ZValueForField:3 andValue:(serialNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeCreated +- (BOOL)isTimeCreatedValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimeCreated { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeCreated:(FITDate *)timeCreated { + [super setFieldUINT32ValueForField:4 andValue:TimestampFromFITDate(timeCreated) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Number +- (BOOL)isNumberValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumber { + return ([super getFieldUINT16ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumber:(FITUInt16)number { + [super setFieldUINT16ValueForField:5 andValue:(number) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ProductName +- (BOOL)isProductNameValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getProductName { + return ([super getFieldSTRINGValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setProductName:(NSString *)productName { + [super setFieldSTRINGValueForField:8 andValue:(productName) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITGoalMesg.mm b/Sources/ObjcFIT/FITGoalMesg.mm new file mode 100644 index 0000000..2ad0745 --- /dev/null +++ b/Sources/ObjcFIT/FITGoalMesg.mm @@ -0,0 +1,260 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITGoalMesg.h" + +@implementation FITGoalMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_GOAL]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:0 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:1 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartDate +- (BOOL)isStartDateValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartDate { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartDate:(FITDate *)startDate { + [super setFieldUINT32ValueForField:2 andValue:TimestampFromFITDate(startDate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndDate +- (BOOL)isEndDateValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getEndDate { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndDate:(FITDate *)endDate { + [super setFieldUINT32ValueForField:3 andValue:TimestampFromFITDate(endDate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGoal)getType { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITGoal)type { + [super setFieldENUMValueForField:4 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Value +- (BOOL)isValueValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getValue { + return ([super getFieldUINT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setValue:(FITUInt32)value { + [super setFieldUINT32ValueForField:5 andValue:(value) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Repeat +- (BOOL)isRepeatValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getRepeat { + return ([super getFieldENUMValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRepeat:(FITBool)repeat { + [super setFieldENUMValueForField:6 andValue:(repeat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TargetValue +- (BOOL)isTargetValueValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTargetValue { + return ([super getFieldUINT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTargetValue:(FITUInt32)targetValue { + [super setFieldUINT32ValueForField:7 andValue:(targetValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Recurrence +- (BOOL)isRecurrenceValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGoalRecurrence)getRecurrence { + return ([super getFieldENUMValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRecurrence:(FITGoalRecurrence)recurrence { + [super setFieldENUMValueForField:8 andValue:(recurrence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RecurrenceValue +- (BOOL)isRecurrenceValueValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getRecurrenceValue { + return ([super getFieldUINT16ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRecurrenceValue:(FITUInt16)recurrenceValue { + [super setFieldUINT16ValueForField:9 andValue:(recurrenceValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getEnabled { + return ([super getFieldENUMValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITBool)enabled { + [super setFieldENUMValueForField:10 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Source +- (BOOL)isSourceValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGoalSource)getSource { + return ([super getFieldENUMValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSource:(FITGoalSource)source { + [super setFieldENUMValueForField:11 andValue:(source) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITGpsMetadataMesg.mm b/Sources/ObjcFIT/FITGpsMetadataMesg.mm new file mode 100644 index 0000000..4fab758 --- /dev/null +++ b/Sources/ObjcFIT/FITGpsMetadataMesg.mm @@ -0,0 +1,192 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITGpsMetadataMesg.h" + +@implementation FITGpsMetadataMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_GPS_METADATA]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLat +- (BOOL)isPositionLatValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLat { + return ([super getFieldSINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLat:(FITSInt32)positionLat { + [super setFieldSINT32ValueForField:1 andValue:(positionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLong +- (BOOL)isPositionLongValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLong { + return ([super getFieldSINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLong:(FITSInt32)positionLong { + [super setFieldSINT32ValueForField:2 andValue:(positionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedAltitude +- (BOOL)isEnhancedAltitudeValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedAltitude { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedAltitude:(FITFloat32)enhancedAltitude { + [super setFieldFLOAT32ValueForField:3 andValue:(enhancedAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedSpeed +- (BOOL)isEnhancedSpeedValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedSpeed { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedSpeed:(FITFloat32)enhancedSpeed { + [super setFieldFLOAT32ValueForField:4 andValue:(enhancedSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Heading +- (BOOL)isHeadingValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getHeading { + return ([super getFieldFLOAT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeading:(FITFloat32)heading { + [super setFieldFLOAT32ValueForField:5 andValue:(heading) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UtcTimestamp +- (BOOL)isUtcTimestampValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getUtcTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUtcTimestamp:(FITDate *)utcTimestamp { + [super setFieldUINT32ValueForField:6 andValue:TimestampFromFITDate(utcTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Velocity +- (uint8_t)numVelocityValues { + return [super getFieldNumValuesForField:7 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isVelocityValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getVelocityforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:7 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVelocity:(FITFloat32)velocity forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:7 andValue:(velocity) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITGyroscopeDataMesg.mm b/Sources/ObjcFIT/FITGyroscopeDataMesg.mm new file mode 100644 index 0000000..966b308 --- /dev/null +++ b/Sources/ObjcFIT/FITGyroscopeDataMesg.mm @@ -0,0 +1,216 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITGyroscopeDataMesg.h" + +@implementation FITGyroscopeDataMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_GYROSCOPE_DATA]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SampleTimeOffset +- (uint8_t)numSampleTimeOffsetValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSampleTimeOffsetValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSampleTimeOffsetforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:1 andValue:(sampleTimeOffset) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GyroX +- (uint8_t)numGyroXValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isGyroXValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getGyroXforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGyroX:(FITUInt16)gyroX forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:2 andValue:(gyroX) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GyroY +- (uint8_t)numGyroYValues { + return [super getFieldNumValuesForField:3 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isGyroYValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getGyroYforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:3 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGyroY:(FITUInt16)gyroY forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:3 andValue:(gyroY) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GyroZ +- (uint8_t)numGyroZValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isGyroZValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getGyroZforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGyroZ:(FITUInt16)gyroZ forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:4 andValue:(gyroZ) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedGyroX +- (uint8_t)numCalibratedGyroXValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedGyroXValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedGyroXforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedGyroX:(FITFloat32)calibratedGyroX forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:5 andValue:(calibratedGyroX) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedGyroY +- (uint8_t)numCalibratedGyroYValues { + return [super getFieldNumValuesForField:6 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedGyroYValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedGyroYforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:6 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedGyroY:(FITFloat32)calibratedGyroY forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:6 andValue:(calibratedGyroY) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedGyroZ +- (uint8_t)numCalibratedGyroZValues { + return [super getFieldNumValuesForField:7 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedGyroZValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedGyroZforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:7 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedGyroZ:(FITFloat32)calibratedGyroZ forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:7 andValue:(calibratedGyroZ) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITHrMesg.mm b/Sources/ObjcFIT/FITHrMesg.mm new file mode 100644 index 0000000..40c1ab3 --- /dev/null +++ b/Sources/ObjcFIT/FITHrMesg.mm @@ -0,0 +1,146 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITHrMesg.h" + +@implementation FITHrMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_HR]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFractionalTimestamp { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp { + [super setFieldFLOAT32ValueForField:0 andValue:(fractionalTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Time256 +- (BOOL)isTime256Valid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTime256 { + return ([super getFieldFLOAT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTime256:(FITFloat32)time256 { + [super setFieldFLOAT32ValueForField:1 andValue:(time256) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FilteredBpm +- (uint8_t)numFilteredBpmValues { + return [super getFieldNumValuesForField:6 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isFilteredBpmValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getFilteredBpmforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:6 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFilteredBpm:(FITUInt8)filteredBpm forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:6 andValue:(filteredBpm) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventTimestamp +- (uint8_t)numEventTimestampValues { + return [super getFieldNumValuesForField:9 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isEventTimestampValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEventTimestampforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:9 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventTimestamp:(FITFloat32)eventTimestamp forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:9 andValue:(eventTimestamp) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventTimestamp12 +- (uint8_t)numEventTimestamp12Values { + return [super getFieldNumValuesForField:10 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isEventTimestamp12ValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getEventTimestamp12forIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:10 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventTimestamp12:(FITByte)eventTimestamp12 forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:10 andValue:(eventTimestamp12) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITHrZoneMesg.mm b/Sources/ObjcFIT/FITHrZoneMesg.mm new file mode 100644 index 0000000..2f6de33 --- /dev/null +++ b/Sources/ObjcFIT/FITHrZoneMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITHrZoneMesg.h" + +@implementation FITHrZoneMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_HR_ZONE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HighBpm +- (BOOL)isHighBpmValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHighBpm { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHighBpm:(FITUInt8)highBpm { + [super setFieldUINT8ValueForField:1 andValue:(highBpm) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:2 andValue:(name) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITHrmProfileMesg.mm b/Sources/ObjcFIT/FITHrmProfileMesg.mm new file mode 100644 index 0000000..95555c5 --- /dev/null +++ b/Sources/ObjcFIT/FITHrmProfileMesg.mm @@ -0,0 +1,116 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITHrmProfileMesg.h" + +@implementation FITHrmProfileMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_HRM_PROFILE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getEnabled { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITBool)enabled { + [super setFieldENUMValueForField:0 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HrmAntId +- (BOOL)isHrmAntIdValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getHrmAntId { + return ([super getFieldUINT16ZValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHrmAntId:(FITUInt16z)hrmAntId { + [super setFieldUINT16ZValueForField:1 andValue:(hrmAntId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LogHrv +- (BOOL)isLogHrvValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getLogHrv { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLogHrv:(FITBool)logHrv { + [super setFieldENUMValueForField:2 andValue:(logHrv) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HrmAntIdTransType +- (BOOL)isHrmAntIdTransTypeValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getHrmAntIdTransType { + return ([super getFieldUINT8ZValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHrmAntIdTransType:(FITUInt8z)hrmAntIdTransType { + [super setFieldUINT8ZValueForField:3 andValue:(hrmAntIdTransType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITHrvMesg.mm b/Sources/ObjcFIT/FITHrvMesg.mm new file mode 100644 index 0000000..a61a469 --- /dev/null +++ b/Sources/ObjcFIT/FITHrvMesg.mm @@ -0,0 +1,48 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITHrvMesg.h" + +@implementation FITHrvMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_HRV]; + + return self; +} + +// Time +- (uint8_t)numTimeValues { + return [super getFieldNumValuesForField:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:0 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTime:(FITFloat32)time forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:0 andValue:(time) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITJumpMesg.mm b/Sources/ObjcFIT/FITJumpMesg.mm new file mode 100644 index 0000000..d41e8eb --- /dev/null +++ b/Sources/ObjcFIT/FITJumpMesg.mm @@ -0,0 +1,206 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITJumpMesg.h" + +@implementation FITJumpMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_JUMP]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Distance +- (BOOL)isDistanceValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDistance { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistance:(FITFloat32)distance { + [super setFieldFLOAT32ValueForField:0 andValue:(distance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Height +- (BOOL)isHeightValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getHeight { + return ([super getFieldFLOAT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeight:(FITFloat32)height { + [super setFieldFLOAT32ValueForField:1 andValue:(height) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Rotations +- (BOOL)isRotationsValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getRotations { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRotations:(FITUInt8)rotations { + [super setFieldUINT8ValueForField:2 andValue:(rotations) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HangTime +- (BOOL)isHangTimeValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getHangTime { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHangTime:(FITFloat32)hangTime { + [super setFieldFLOAT32ValueForField:3 andValue:(hangTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Score +- (BOOL)isScoreValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getScore { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScore:(FITFloat32)score { + [super setFieldFLOAT32ValueForField:4 andValue:(score) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLat +- (BOOL)isPositionLatValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLat { + return ([super getFieldSINT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLat:(FITSInt32)positionLat { + [super setFieldSINT32ValueForField:5 andValue:(positionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLong +- (BOOL)isPositionLongValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLong { + return ([super getFieldSINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLong:(FITSInt32)positionLong { + [super setFieldSINT32ValueForField:6 andValue:(positionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Speed +- (BOOL)isSpeedValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSpeed { + return ([super getFieldFLOAT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSpeed:(FITFloat32)speed { + [super setFieldFLOAT32ValueForField:7 andValue:(speed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedSpeed +- (BOOL)isEnhancedSpeedValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedSpeed { + return ([super getFieldFLOAT32ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedSpeed:(FITFloat32)enhancedSpeed { + [super setFieldFLOAT32ValueForField:8 andValue:(enhancedSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITLapMesg.mm b/Sources/ObjcFIT/FITLapMesg.mm new file mode 100644 index 0000000..d57a67e --- /dev/null +++ b/Sources/ObjcFIT/FITLapMesg.mm @@ -0,0 +1,2293 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITLapMesg.h" + +@implementation FITLapMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_LAP]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Event +- (BOOL)isEventValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEvent)getEvent { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEvent:(FITEvent)event { + [super setFieldENUMValueForField:0 andValue:(event) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventType +- (BOOL)isEventTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEventType)getEventType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventType:(FITEventType)eventType { + [super setFieldENUMValueForField:1 andValue:(eventType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTime +- (BOOL)isStartTimeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTime:(FITDate *)startTime { + [super setFieldUINT32ValueForField:2 andValue:TimestampFromFITDate(startTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartPositionLat +- (BOOL)isStartPositionLatValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getStartPositionLat { + return ([super getFieldSINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartPositionLat:(FITSInt32)startPositionLat { + [super setFieldSINT32ValueForField:3 andValue:(startPositionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartPositionLong +- (BOOL)isStartPositionLongValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getStartPositionLong { + return ([super getFieldSINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartPositionLong:(FITSInt32)startPositionLong { + [super setFieldSINT32ValueForField:4 andValue:(startPositionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndPositionLat +- (BOOL)isEndPositionLatValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getEndPositionLat { + return ([super getFieldSINT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndPositionLat:(FITSInt32)endPositionLat { + [super setFieldSINT32ValueForField:5 andValue:(endPositionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndPositionLong +- (BOOL)isEndPositionLongValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getEndPositionLong { + return ([super getFieldSINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndPositionLong:(FITSInt32)endPositionLong { + [super setFieldSINT32ValueForField:6 andValue:(endPositionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalElapsedTime { + return ([super getFieldFLOAT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime { + [super setFieldFLOAT32ValueForField:7 andValue:(totalElapsedTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalTimerTime { + return ([super getFieldFLOAT32ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime { + [super setFieldFLOAT32ValueForField:8 andValue:(totalTimerTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalDistance +- (BOOL)isTotalDistanceValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalDistance { + return ([super getFieldFLOAT32ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalDistance:(FITFloat32)totalDistance { + [super setFieldFLOAT32ValueForField:9 andValue:(totalDistance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalCycles +- (BOOL)isTotalCyclesValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalCycles { + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCycles:(FITUInt32)totalCycles { + [super setFieldUINT32ValueForField:10 andValue:(totalCycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// TotalCycles - Sub Fields +// TotalStrides - TotalCycles Field - Sub Field +- (BOOL)isTotalStridesValid +{ + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:10 supportSubField:(FITUInt16)FITLapMesgTotalCyclesFieldTotalStridesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITLapMesgTotalCyclesFieldTotalStridesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalStrides +{ + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FITLapMesgTotalCyclesFieldTotalStridesSubField]); +} + +- (void)setTotalStrides:(FITUInt32)totalStrides +{ + [super setFieldUINT32ValueForField:10 andValue:(totalStrides) forIndex:0 andSubFieldIndex:FITLapMesgTotalCyclesFieldTotalStridesSubField]; +} +// TotalStrokes - TotalCycles Field - Sub Field +- (BOOL)isTotalStrokesValid +{ + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:10 supportSubField:(FITUInt16)FITLapMesgTotalCyclesFieldTotalStrokesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITLapMesgTotalCyclesFieldTotalStrokesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalStrokes +{ + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FITLapMesgTotalCyclesFieldTotalStrokesSubField]); +} + +- (void)setTotalStrokes:(FITUInt32)totalStrokes +{ + [super setFieldUINT32ValueForField:10 andValue:(totalStrokes) forIndex:0 andSubFieldIndex:FITLapMesgTotalCyclesFieldTotalStrokesSubField]; +} + +// TotalCalories +- (BOOL)isTotalCaloriesValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalCalories { + return ([super getFieldUINT16ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCalories:(FITUInt16)totalCalories { + [super setFieldUINT16ValueForField:11 andValue:(totalCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFatCalories +- (BOOL)isTotalFatCaloriesValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalFatCalories { + return ([super getFieldUINT16ValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFatCalories:(FITUInt16)totalFatCalories { + [super setFieldUINT16ValueForField:12 andValue:(totalFatCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgSpeed +- (BOOL)isAvgSpeedValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgSpeed { + return ([super getFieldFLOAT32ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgSpeed:(FITFloat32)avgSpeed { + [super setFieldFLOAT32ValueForField:13 andValue:(avgSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxSpeed +- (BOOL)isMaxSpeedValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxSpeed { + return ([super getFieldFLOAT32ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxSpeed:(FITFloat32)maxSpeed { + [super setFieldFLOAT32ValueForField:14 andValue:(maxSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgHeartRate +- (BOOL)isAvgHeartRateValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgHeartRate { + return ([super getFieldUINT8ValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgHeartRate:(FITUInt8)avgHeartRate { + [super setFieldUINT8ValueForField:15 andValue:(avgHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxHeartRate +- (BOOL)isMaxHeartRateValid { + const fit::Field* field = [super getField:16]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxHeartRate { + return ([super getFieldUINT8ValueForField:16 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate { + [super setFieldUINT8ValueForField:16 andValue:(maxHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCadence +- (BOOL)isAvgCadenceValid { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgCadence { + return ([super getFieldUINT8ValueForField:17 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCadence:(FITUInt8)avgCadence { + [super setFieldUINT8ValueForField:17 andValue:(avgCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// AvgCadence - Sub Fields +// AvgRunningCadence - AvgCadence Field - Sub Field +- (BOOL)isAvgRunningCadenceValid +{ + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:17 supportSubField:(FITUInt16)FITLapMesgAvgCadenceFieldAvgRunningCadenceSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITLapMesgAvgCadenceFieldAvgRunningCadenceSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgRunningCadence +{ + return ([super getFieldUINT8ValueForField:17 forIndex:0 andSubFieldIndex:FITLapMesgAvgCadenceFieldAvgRunningCadenceSubField]); +} + +- (void)setAvgRunningCadence:(FITUInt8)avgRunningCadence +{ + [super setFieldUINT8ValueForField:17 andValue:(avgRunningCadence) forIndex:0 andSubFieldIndex:FITLapMesgAvgCadenceFieldAvgRunningCadenceSubField]; +} + +// MaxCadence +- (BOOL)isMaxCadenceValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxCadence { + return ([super getFieldUINT8ValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCadence:(FITUInt8)maxCadence { + [super setFieldUINT8ValueForField:18 andValue:(maxCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// MaxCadence - Sub Fields +// MaxRunningCadence - MaxCadence Field - Sub Field +- (BOOL)isMaxRunningCadenceValid +{ + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:18 supportSubField:(FITUInt16)FITLapMesgMaxCadenceFieldMaxRunningCadenceSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITLapMesgMaxCadenceFieldMaxRunningCadenceSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxRunningCadence +{ + return ([super getFieldUINT8ValueForField:18 forIndex:0 andSubFieldIndex:FITLapMesgMaxCadenceFieldMaxRunningCadenceSubField]); +} + +- (void)setMaxRunningCadence:(FITUInt8)maxRunningCadence +{ + [super setFieldUINT8ValueForField:18 andValue:(maxRunningCadence) forIndex:0 andSubFieldIndex:FITLapMesgMaxCadenceFieldMaxRunningCadenceSubField]; +} + +// AvgPower +- (BOOL)isAvgPowerValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgPower { + return ([super getFieldUINT16ValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPower:(FITUInt16)avgPower { + [super setFieldUINT16ValueForField:19 andValue:(avgPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPower +- (BOOL)isMaxPowerValid { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPower { + return ([super getFieldUINT16ValueForField:20 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPower:(FITUInt16)maxPower { + [super setFieldUINT16ValueForField:20 andValue:(maxPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalAscent +- (BOOL)isTotalAscentValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalAscent { + return ([super getFieldUINT16ValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalAscent:(FITUInt16)totalAscent { + [super setFieldUINT16ValueForField:21 andValue:(totalAscent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalDescent +- (BOOL)isTotalDescentValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalDescent { + return ([super getFieldUINT16ValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalDescent:(FITUInt16)totalDescent { + [super setFieldUINT16ValueForField:22 andValue:(totalDescent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Intensity +- (BOOL)isIntensityValid { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITIntensity)getIntensity { + return ([super getFieldENUMValueForField:23 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setIntensity:(FITIntensity)intensity { + [super setFieldENUMValueForField:23 andValue:(intensity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LapTrigger +- (BOOL)isLapTriggerValid { + const fit::Field* field = [super getField:24]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLapTrigger)getLapTrigger { + return ([super getFieldENUMValueForField:24 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLapTrigger:(FITLapTrigger)lapTrigger { + [super setFieldENUMValueForField:24 andValue:(lapTrigger) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:25]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:25 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:25 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventGroup +- (BOOL)isEventGroupValid { + const fit::Field* field = [super getField:26]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEventGroup { + return ([super getFieldUINT8ValueForField:26 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventGroup:(FITUInt8)eventGroup { + [super setFieldUINT8ValueForField:26 andValue:(eventGroup) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumLengths +- (BOOL)isNumLengthsValid { + const fit::Field* field = [super getField:32]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumLengths { + return ([super getFieldUINT16ValueForField:32 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumLengths:(FITUInt16)numLengths { + [super setFieldUINT16ValueForField:32 andValue:(numLengths) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NormalizedPower +- (BOOL)isNormalizedPowerValid { + const fit::Field* field = [super getField:33]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNormalizedPower { + return ([super getFieldUINT16ValueForField:33 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNormalizedPower:(FITUInt16)normalizedPower { + [super setFieldUINT16ValueForField:33 andValue:(normalizedPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid { + const fit::Field* field = [super getField:34]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLeftRightBalance100)getLeftRightBalance { + return ([super getFieldUINT16ValueForField:34 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftRightBalance:(FITLeftRightBalance100)leftRightBalance { + [super setFieldUINT16ValueForField:34 andValue:(leftRightBalance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FirstLengthIndex +- (BOOL)isFirstLengthIndexValid { + const fit::Field* field = [super getField:35]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getFirstLengthIndex { + return ([super getFieldUINT16ValueForField:35 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFirstLengthIndex:(FITUInt16)firstLengthIndex { + [super setFieldUINT16ValueForField:35 andValue:(firstLengthIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStrokeDistance +- (BOOL)isAvgStrokeDistanceValid { + const fit::Field* field = [super getField:37]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStrokeDistance { + return ([super getFieldFLOAT32ValueForField:37 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStrokeDistance:(FITFloat32)avgStrokeDistance { + [super setFieldFLOAT32ValueForField:37 andValue:(avgStrokeDistance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SwimStroke +- (BOOL)isSwimStrokeValid { + const fit::Field* field = [super getField:38]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSwimStroke)getSwimStroke { + return ([super getFieldENUMValueForField:38 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSwimStroke:(FITSwimStroke)swimStroke { + [super setFieldENUMValueForField:38 andValue:(swimStroke) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:39]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:39 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:39 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumActiveLengths +- (BOOL)isNumActiveLengthsValid { + const fit::Field* field = [super getField:40]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumActiveLengths { + return ([super getFieldUINT16ValueForField:40 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumActiveLengths:(FITUInt16)numActiveLengths { + [super setFieldUINT16ValueForField:40 andValue:(numActiveLengths) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalWork +- (BOOL)isTotalWorkValid { + const fit::Field* field = [super getField:41]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalWork { + return ([super getFieldUINT32ValueForField:41 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalWork:(FITUInt32)totalWork { + [super setFieldUINT32ValueForField:41 andValue:(totalWork) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgAltitude +- (BOOL)isAvgAltitudeValid { + const fit::Field* field = [super getField:42]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgAltitude { + return ([super getFieldFLOAT32ValueForField:42 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgAltitude:(FITFloat32)avgAltitude { + [super setFieldFLOAT32ValueForField:42 andValue:(avgAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxAltitude +- (BOOL)isMaxAltitudeValid { + const fit::Field* field = [super getField:43]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxAltitude { + return ([super getFieldFLOAT32ValueForField:43 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxAltitude:(FITFloat32)maxAltitude { + [super setFieldFLOAT32ValueForField:43 andValue:(maxAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GpsAccuracy +- (BOOL)isGpsAccuracyValid { + const fit::Field* field = [super getField:44]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getGpsAccuracy { + return ([super getFieldUINT8ValueForField:44 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy { + [super setFieldUINT8ValueForField:44 andValue:(gpsAccuracy) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgGrade +- (BOOL)isAvgGradeValid { + const fit::Field* field = [super getField:45]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgGrade { + return ([super getFieldFLOAT32ValueForField:45 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgGrade:(FITFloat32)avgGrade { + [super setFieldFLOAT32ValueForField:45 andValue:(avgGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPosGrade +- (BOOL)isAvgPosGradeValid { + const fit::Field* field = [super getField:46]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgPosGrade { + return ([super getFieldFLOAT32ValueForField:46 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPosGrade:(FITFloat32)avgPosGrade { + [super setFieldFLOAT32ValueForField:46 andValue:(avgPosGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgNegGrade +- (BOOL)isAvgNegGradeValid { + const fit::Field* field = [super getField:47]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgNegGrade { + return ([super getFieldFLOAT32ValueForField:47 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgNegGrade:(FITFloat32)avgNegGrade { + [super setFieldFLOAT32ValueForField:47 andValue:(avgNegGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPosGrade +- (BOOL)isMaxPosGradeValid { + const fit::Field* field = [super getField:48]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxPosGrade { + return ([super getFieldFLOAT32ValueForField:48 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPosGrade:(FITFloat32)maxPosGrade { + [super setFieldFLOAT32ValueForField:48 andValue:(maxPosGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxNegGrade +- (BOOL)isMaxNegGradeValid { + const fit::Field* field = [super getField:49]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxNegGrade { + return ([super getFieldFLOAT32ValueForField:49 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxNegGrade:(FITFloat32)maxNegGrade { + [super setFieldFLOAT32ValueForField:49 andValue:(maxNegGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgTemperature +- (BOOL)isAvgTemperatureValid { + const fit::Field* field = [super getField:50]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgTemperature { + return ([super getFieldSINT8ValueForField:50 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgTemperature:(FITSInt8)avgTemperature { + [super setFieldSINT8ValueForField:50 andValue:(avgTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxTemperature +- (BOOL)isMaxTemperatureValid { + const fit::Field* field = [super getField:51]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getMaxTemperature { + return ([super getFieldSINT8ValueForField:51 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxTemperature:(FITSInt8)maxTemperature { + [super setFieldSINT8ValueForField:51 andValue:(maxTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalMovingTime +- (BOOL)isTotalMovingTimeValid { + const fit::Field* field = [super getField:52]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalMovingTime { + return ([super getFieldFLOAT32ValueForField:52 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalMovingTime:(FITFloat32)totalMovingTime { + [super setFieldFLOAT32ValueForField:52 andValue:(totalMovingTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPosVerticalSpeed +- (BOOL)isAvgPosVerticalSpeedValid { + const fit::Field* field = [super getField:53]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgPosVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:53 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPosVerticalSpeed:(FITFloat32)avgPosVerticalSpeed { + [super setFieldFLOAT32ValueForField:53 andValue:(avgPosVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgNegVerticalSpeed +- (BOOL)isAvgNegVerticalSpeedValid { + const fit::Field* field = [super getField:54]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgNegVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:54 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgNegVerticalSpeed:(FITFloat32)avgNegVerticalSpeed { + [super setFieldFLOAT32ValueForField:54 andValue:(avgNegVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPosVerticalSpeed +- (BOOL)isMaxPosVerticalSpeedValid { + const fit::Field* field = [super getField:55]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxPosVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:55 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPosVerticalSpeed:(FITFloat32)maxPosVerticalSpeed { + [super setFieldFLOAT32ValueForField:55 andValue:(maxPosVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxNegVerticalSpeed +- (BOOL)isMaxNegVerticalSpeedValid { + const fit::Field* field = [super getField:56]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxNegVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:56 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxNegVerticalSpeed:(FITFloat32)maxNegVerticalSpeed { + [super setFieldFLOAT32ValueForField:56 andValue:(maxNegVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInHrZone +- (uint8_t)numTimeInHrZoneValues { + return [super getFieldNumValuesForField:57 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInHrZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:57]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInHrZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:57 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInHrZone:(FITFloat32)timeInHrZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:57 andValue:(timeInHrZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInSpeedZone +- (uint8_t)numTimeInSpeedZoneValues { + return [super getFieldNumValuesForField:58 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInSpeedZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:58]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInSpeedZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:58 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInSpeedZone:(FITFloat32)timeInSpeedZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:58 andValue:(timeInSpeedZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInCadenceZone +- (uint8_t)numTimeInCadenceZoneValues { + return [super getFieldNumValuesForField:59 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInCadenceZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:59]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInCadenceZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:59 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInCadenceZone:(FITFloat32)timeInCadenceZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:59 andValue:(timeInCadenceZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInPowerZone +- (uint8_t)numTimeInPowerZoneValues { + return [super getFieldNumValuesForField:60 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInPowerZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:60]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInPowerZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:60 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInPowerZone:(FITFloat32)timeInPowerZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:60 andValue:(timeInPowerZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RepetitionNum +- (BOOL)isRepetitionNumValid { + const fit::Field* field = [super getField:61]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getRepetitionNum { + return ([super getFieldUINT16ValueForField:61 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRepetitionNum:(FITUInt16)repetitionNum { + [super setFieldUINT16ValueForField:61 andValue:(repetitionNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinAltitude +- (BOOL)isMinAltitudeValid { + const fit::Field* field = [super getField:62]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinAltitude { + return ([super getFieldFLOAT32ValueForField:62 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinAltitude:(FITFloat32)minAltitude { + [super setFieldFLOAT32ValueForField:62 andValue:(minAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinHeartRate +- (BOOL)isMinHeartRateValid { + const fit::Field* field = [super getField:63]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMinHeartRate { + return ([super getFieldUINT8ValueForField:63 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinHeartRate:(FITUInt8)minHeartRate { + [super setFieldUINT8ValueForField:63 andValue:(minHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WktStepIndex +- (BOOL)isWktStepIndexValid { + const fit::Field* field = [super getField:71]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getWktStepIndex { + return ([super getFieldUINT16ValueForField:71 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWktStepIndex:(FITMessageIndex)wktStepIndex { + [super setFieldUINT16ValueForField:71 andValue:(wktStepIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OpponentScore +- (BOOL)isOpponentScoreValid { + const fit::Field* field = [super getField:74]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getOpponentScore { + return ([super getFieldUINT16ValueForField:74 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOpponentScore:(FITUInt16)opponentScore { + [super setFieldUINT16ValueForField:74 andValue:(opponentScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StrokeCount +- (uint8_t)numStrokeCountValues { + return [super getFieldNumValuesForField:75 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isStrokeCountValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:75]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStrokeCountforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:75 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStrokeCount:(FITUInt16)strokeCount forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:75 andValue:(strokeCount) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ZoneCount +- (uint8_t)numZoneCountValues { + return [super getFieldNumValuesForField:76 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isZoneCountValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:76]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getZoneCountforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:76 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setZoneCount:(FITUInt16)zoneCount forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:76 andValue:(zoneCount) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgVerticalOscillation +- (BOOL)isAvgVerticalOscillationValid { + const fit::Field* field = [super getField:77]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgVerticalOscillation { + return ([super getFieldFLOAT32ValueForField:77 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgVerticalOscillation:(FITFloat32)avgVerticalOscillation { + [super setFieldFLOAT32ValueForField:77 andValue:(avgVerticalOscillation) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStanceTimePercent +- (BOOL)isAvgStanceTimePercentValid { + const fit::Field* field = [super getField:78]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStanceTimePercent { + return ([super getFieldFLOAT32ValueForField:78 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStanceTimePercent:(FITFloat32)avgStanceTimePercent { + [super setFieldFLOAT32ValueForField:78 andValue:(avgStanceTimePercent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStanceTime +- (BOOL)isAvgStanceTimeValid { + const fit::Field* field = [super getField:79]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStanceTime { + return ([super getFieldFLOAT32ValueForField:79 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStanceTime:(FITFloat32)avgStanceTime { + [super setFieldFLOAT32ValueForField:79 andValue:(avgStanceTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgFractionalCadence +- (BOOL)isAvgFractionalCadenceValid { + const fit::Field* field = [super getField:80]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgFractionalCadence { + return ([super getFieldFLOAT32ValueForField:80 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgFractionalCadence:(FITFloat32)avgFractionalCadence { + [super setFieldFLOAT32ValueForField:80 andValue:(avgFractionalCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxFractionalCadence +- (BOOL)isMaxFractionalCadenceValid { + const fit::Field* field = [super getField:81]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxFractionalCadence { + return ([super getFieldFLOAT32ValueForField:81 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxFractionalCadence:(FITFloat32)maxFractionalCadence { + [super setFieldFLOAT32ValueForField:81 andValue:(maxFractionalCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalCycles +- (BOOL)isTotalFractionalCyclesValid { + const fit::Field* field = [super getField:82]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalCycles { + return ([super getFieldFLOAT32ValueForField:82 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalCycles:(FITFloat32)totalFractionalCycles { + [super setFieldFLOAT32ValueForField:82 andValue:(totalFractionalCycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PlayerScore +- (BOOL)isPlayerScoreValid { + const fit::Field* field = [super getField:83]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getPlayerScore { + return ([super getFieldUINT16ValueForField:83 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPlayerScore:(FITUInt16)playerScore { + [super setFieldUINT16ValueForField:83 andValue:(playerScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgTotalHemoglobinConc +- (uint8_t)numAvgTotalHemoglobinConcValues { + return [super getFieldNumValuesForField:84 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgTotalHemoglobinConcValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:84]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgTotalHemoglobinConcforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:84 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgTotalHemoglobinConc:(FITFloat32)avgTotalHemoglobinConc forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:84 andValue:(avgTotalHemoglobinConc) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinTotalHemoglobinConc +- (uint8_t)numMinTotalHemoglobinConcValues { + return [super getFieldNumValuesForField:85 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMinTotalHemoglobinConcValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:85]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinTotalHemoglobinConcforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:85 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinTotalHemoglobinConc:(FITFloat32)minTotalHemoglobinConc forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:85 andValue:(minTotalHemoglobinConc) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxTotalHemoglobinConc +- (uint8_t)numMaxTotalHemoglobinConcValues { + return [super getFieldNumValuesForField:86 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxTotalHemoglobinConcValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:86]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxTotalHemoglobinConcforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:86 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxTotalHemoglobinConc:(FITFloat32)maxTotalHemoglobinConc forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:86 andValue:(maxTotalHemoglobinConc) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgSaturatedHemoglobinPercent +- (uint8_t)numAvgSaturatedHemoglobinPercentValues { + return [super getFieldNumValuesForField:87 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgSaturatedHemoglobinPercentValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:87]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgSaturatedHemoglobinPercentforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:87 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgSaturatedHemoglobinPercent:(FITFloat32)avgSaturatedHemoglobinPercent forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:87 andValue:(avgSaturatedHemoglobinPercent) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinSaturatedHemoglobinPercent +- (uint8_t)numMinSaturatedHemoglobinPercentValues { + return [super getFieldNumValuesForField:88 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMinSaturatedHemoglobinPercentValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:88]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinSaturatedHemoglobinPercentforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:88 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinSaturatedHemoglobinPercent:(FITFloat32)minSaturatedHemoglobinPercent forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:88 andValue:(minSaturatedHemoglobinPercent) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxSaturatedHemoglobinPercent +- (uint8_t)numMaxSaturatedHemoglobinPercentValues { + return [super getFieldNumValuesForField:89 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxSaturatedHemoglobinPercentValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:89]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxSaturatedHemoglobinPercentforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:89 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxSaturatedHemoglobinPercent:(FITFloat32)maxSaturatedHemoglobinPercent forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:89 andValue:(maxSaturatedHemoglobinPercent) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftTorqueEffectiveness +- (BOOL)isAvgLeftTorqueEffectivenessValid { + const fit::Field* field = [super getField:91]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:91 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftTorqueEffectiveness:(FITFloat32)avgLeftTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:91 andValue:(avgLeftTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightTorqueEffectiveness +- (BOOL)isAvgRightTorqueEffectivenessValid { + const fit::Field* field = [super getField:92]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:92 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightTorqueEffectiveness:(FITFloat32)avgRightTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:92 andValue:(avgRightTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPedalSmoothness +- (BOOL)isAvgLeftPedalSmoothnessValid { + const fit::Field* field = [super getField:93]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:93 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPedalSmoothness:(FITFloat32)avgLeftPedalSmoothness { + [super setFieldFLOAT32ValueForField:93 andValue:(avgLeftPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPedalSmoothness +- (BOOL)isAvgRightPedalSmoothnessValid { + const fit::Field* field = [super getField:94]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:94 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPedalSmoothness:(FITFloat32)avgRightPedalSmoothness { + [super setFieldFLOAT32ValueForField:94 andValue:(avgRightPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCombinedPedalSmoothness +- (BOOL)isAvgCombinedPedalSmoothnessValid { + const fit::Field* field = [super getField:95]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgCombinedPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:95 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCombinedPedalSmoothness:(FITFloat32)avgCombinedPedalSmoothness { + [super setFieldFLOAT32ValueForField:95 andValue:(avgCombinedPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeStanding +- (BOOL)isTimeStandingValid { + const fit::Field* field = [super getField:98]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeStanding { + return ([super getFieldFLOAT32ValueForField:98 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeStanding:(FITFloat32)timeStanding { + [super setFieldFLOAT32ValueForField:98 andValue:(timeStanding) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StandCount +- (BOOL)isStandCountValid { + const fit::Field* field = [super getField:99]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStandCount { + return ([super getFieldUINT16ValueForField:99 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStandCount:(FITUInt16)standCount { + [super setFieldUINT16ValueForField:99 andValue:(standCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPco +- (BOOL)isAvgLeftPcoValid { + const fit::Field* field = [super getField:100]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgLeftPco { + return ([super getFieldSINT8ValueForField:100 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPco:(FITSInt8)avgLeftPco { + [super setFieldSINT8ValueForField:100 andValue:(avgLeftPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPco +- (BOOL)isAvgRightPcoValid { + const fit::Field* field = [super getField:101]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgRightPco { + return ([super getFieldSINT8ValueForField:101 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPco:(FITSInt8)avgRightPco { + [super setFieldSINT8ValueForField:101 andValue:(avgRightPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPowerPhase +- (uint8_t)numAvgLeftPowerPhaseValues { + return [super getFieldNumValuesForField:102 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgLeftPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:102]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:102 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPowerPhase:(FITFloat32)avgLeftPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:102 andValue:(avgLeftPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPowerPhasePeak +- (uint8_t)numAvgLeftPowerPhasePeakValues { + return [super getFieldNumValuesForField:103 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgLeftPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:103]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:103 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPowerPhasePeak:(FITFloat32)avgLeftPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:103 andValue:(avgLeftPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPowerPhase +- (uint8_t)numAvgRightPowerPhaseValues { + return [super getFieldNumValuesForField:104 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgRightPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:104]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:104 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPowerPhase:(FITFloat32)avgRightPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:104 andValue:(avgRightPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPowerPhasePeak +- (uint8_t)numAvgRightPowerPhasePeakValues { + return [super getFieldNumValuesForField:105 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgRightPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:105]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:105 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPowerPhasePeak:(FITFloat32)avgRightPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:105 andValue:(avgRightPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPowerPosition +- (uint8_t)numAvgPowerPositionValues { + return [super getFieldNumValuesForField:106 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgPowerPositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:106]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgPowerPositionforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:106 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPowerPosition:(FITUInt16)avgPowerPosition forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:106 andValue:(avgPowerPosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPowerPosition +- (uint8_t)numMaxPowerPositionValues { + return [super getFieldNumValuesForField:107 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxPowerPositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:107]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPowerPositionforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:107 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPowerPosition:(FITUInt16)maxPowerPosition forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:107 andValue:(maxPowerPosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCadencePosition +- (uint8_t)numAvgCadencePositionValues { + return [super getFieldNumValuesForField:108 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgCadencePositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:108]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgCadencePositionforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:108 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCadencePosition:(FITUInt8)avgCadencePosition forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:108 andValue:(avgCadencePosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxCadencePosition +- (uint8_t)numMaxCadencePositionValues { + return [super getFieldNumValuesForField:109 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxCadencePositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:109]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxCadencePositionforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:109 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCadencePosition:(FITUInt8)maxCadencePosition forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:109 andValue:(maxCadencePosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedAvgSpeed +- (BOOL)isEnhancedAvgSpeedValid { + const fit::Field* field = [super getField:110]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedAvgSpeed { + return ([super getFieldFLOAT32ValueForField:110 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedAvgSpeed:(FITFloat32)enhancedAvgSpeed { + [super setFieldFLOAT32ValueForField:110 andValue:(enhancedAvgSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedMaxSpeed +- (BOOL)isEnhancedMaxSpeedValid { + const fit::Field* field = [super getField:111]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedMaxSpeed { + return ([super getFieldFLOAT32ValueForField:111 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedMaxSpeed:(FITFloat32)enhancedMaxSpeed { + [super setFieldFLOAT32ValueForField:111 andValue:(enhancedMaxSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedAvgAltitude +- (BOOL)isEnhancedAvgAltitudeValid { + const fit::Field* field = [super getField:112]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedAvgAltitude { + return ([super getFieldFLOAT32ValueForField:112 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedAvgAltitude:(FITFloat32)enhancedAvgAltitude { + [super setFieldFLOAT32ValueForField:112 andValue:(enhancedAvgAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedMinAltitude +- (BOOL)isEnhancedMinAltitudeValid { + const fit::Field* field = [super getField:113]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedMinAltitude { + return ([super getFieldFLOAT32ValueForField:113 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedMinAltitude:(FITFloat32)enhancedMinAltitude { + [super setFieldFLOAT32ValueForField:113 andValue:(enhancedMinAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedMaxAltitude +- (BOOL)isEnhancedMaxAltitudeValid { + const fit::Field* field = [super getField:114]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedMaxAltitude { + return ([super getFieldFLOAT32ValueForField:114 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedMaxAltitude:(FITFloat32)enhancedMaxAltitude { + [super setFieldFLOAT32ValueForField:114 andValue:(enhancedMaxAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLevMotorPower +- (BOOL)isAvgLevMotorPowerValid { + const fit::Field* field = [super getField:115]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgLevMotorPower { + return ([super getFieldUINT16ValueForField:115 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLevMotorPower:(FITUInt16)avgLevMotorPower { + [super setFieldUINT16ValueForField:115 andValue:(avgLevMotorPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxLevMotorPower +- (BOOL)isMaxLevMotorPowerValid { + const fit::Field* field = [super getField:116]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxLevMotorPower { + return ([super getFieldUINT16ValueForField:116 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxLevMotorPower:(FITUInt16)maxLevMotorPower { + [super setFieldUINT16ValueForField:116 andValue:(maxLevMotorPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LevBatteryConsumption +- (BOOL)isLevBatteryConsumptionValid { + const fit::Field* field = [super getField:117]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getLevBatteryConsumption { + return ([super getFieldFLOAT32ValueForField:117 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLevBatteryConsumption:(FITFloat32)levBatteryConsumption { + [super setFieldFLOAT32ValueForField:117 andValue:(levBatteryConsumption) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgVerticalRatio +- (BOOL)isAvgVerticalRatioValid { + const fit::Field* field = [super getField:118]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgVerticalRatio { + return ([super getFieldFLOAT32ValueForField:118 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgVerticalRatio:(FITFloat32)avgVerticalRatio { + [super setFieldFLOAT32ValueForField:118 andValue:(avgVerticalRatio) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStanceTimeBalance +- (BOOL)isAvgStanceTimeBalanceValid { + const fit::Field* field = [super getField:119]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStanceTimeBalance { + return ([super getFieldFLOAT32ValueForField:119 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStanceTimeBalance:(FITFloat32)avgStanceTimeBalance { + [super setFieldFLOAT32ValueForField:119 andValue:(avgStanceTimeBalance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStepLength +- (BOOL)isAvgStepLengthValid { + const fit::Field* field = [super getField:120]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStepLength { + return ([super getFieldFLOAT32ValueForField:120 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStepLength:(FITFloat32)avgStepLength { + [super setFieldFLOAT32ValueForField:120 andValue:(avgStepLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgVam +- (BOOL)isAvgVamValid { + const fit::Field* field = [super getField:121]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgVam { + return ([super getFieldFLOAT32ValueForField:121 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgVam:(FITFloat32)avgVam { + [super setFieldFLOAT32ValueForField:121 andValue:(avgVam) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalGrit +- (BOOL)isTotalGritValid { + const fit::Field* field = [super getField:149]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalGrit { + return ([super getFieldFLOAT32ValueForField:149 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalGrit:(FITFloat32)totalGrit { + [super setFieldFLOAT32ValueForField:149 andValue:(totalGrit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFlow +- (BOOL)isTotalFlowValid { + const fit::Field* field = [super getField:150]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFlow { + return ([super getFieldFLOAT32ValueForField:150 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFlow:(FITFloat32)totalFlow { + [super setFieldFLOAT32ValueForField:150 andValue:(totalFlow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// JumpCount +- (BOOL)isJumpCountValid { + const fit::Field* field = [super getField:151]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getJumpCount { + return ([super getFieldUINT16ValueForField:151 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setJumpCount:(FITUInt16)jumpCount { + [super setFieldUINT16ValueForField:151 andValue:(jumpCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgGrit +- (BOOL)isAvgGritValid { + const fit::Field* field = [super getField:153]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgGrit { + return ([super getFieldFLOAT32ValueForField:153 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgGrit:(FITFloat32)avgGrit { + [super setFieldFLOAT32ValueForField:153 andValue:(avgGrit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgFlow +- (BOOL)isAvgFlowValid { + const fit::Field* field = [super getField:154]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgFlow { + return ([super getFieldFLOAT32ValueForField:154 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgFlow:(FITFloat32)avgFlow { + [super setFieldFLOAT32ValueForField:154 andValue:(avgFlow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalAscent +- (BOOL)isTotalFractionalAscentValid { + const fit::Field* field = [super getField:156]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalAscent { + return ([super getFieldFLOAT32ValueForField:156 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalAscent:(FITFloat32)totalFractionalAscent { + [super setFieldFLOAT32ValueForField:156 andValue:(totalFractionalAscent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalDescent +- (BOOL)isTotalFractionalDescentValid { + const fit::Field* field = [super getField:157]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalDescent { + return ([super getFieldFLOAT32ValueForField:157 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalDescent:(FITFloat32)totalFractionalDescent { + [super setFieldFLOAT32ValueForField:157 andValue:(totalFractionalDescent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCoreTemperature +- (BOOL)isAvgCoreTemperatureValid { + const fit::Field* field = [super getField:158]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgCoreTemperature { + return ([super getFieldFLOAT32ValueForField:158 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCoreTemperature:(FITFloat32)avgCoreTemperature { + [super setFieldFLOAT32ValueForField:158 andValue:(avgCoreTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinCoreTemperature +- (BOOL)isMinCoreTemperatureValid { + const fit::Field* field = [super getField:159]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinCoreTemperature { + return ([super getFieldFLOAT32ValueForField:159 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinCoreTemperature:(FITFloat32)minCoreTemperature { + [super setFieldFLOAT32ValueForField:159 andValue:(minCoreTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxCoreTemperature +- (BOOL)isMaxCoreTemperatureValid { + const fit::Field* field = [super getField:160]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxCoreTemperature { + return ([super getFieldFLOAT32ValueForField:160 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCoreTemperature:(FITFloat32)maxCoreTemperature { + [super setFieldFLOAT32ValueForField:160 andValue:(maxCoreTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITLengthMesg.mm b/Sources/ObjcFIT/FITLengthMesg.mm new file mode 100644 index 0000000..8b7e719 --- /dev/null +++ b/Sources/ObjcFIT/FITLengthMesg.mm @@ -0,0 +1,358 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITLengthMesg.h" + +@implementation FITLengthMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_LENGTH]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Event +- (BOOL)isEventValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEvent)getEvent { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEvent:(FITEvent)event { + [super setFieldENUMValueForField:0 andValue:(event) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventType +- (BOOL)isEventTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEventType)getEventType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventType:(FITEventType)eventType { + [super setFieldENUMValueForField:1 andValue:(eventType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTime +- (BOOL)isStartTimeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTime:(FITDate *)startTime { + [super setFieldUINT32ValueForField:2 andValue:TimestampFromFITDate(startTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalElapsedTime { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime { + [super setFieldFLOAT32ValueForField:3 andValue:(totalElapsedTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalTimerTime { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime { + [super setFieldFLOAT32ValueForField:4 andValue:(totalTimerTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalStrokes +- (BOOL)isTotalStrokesValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalStrokes { + return ([super getFieldUINT16ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalStrokes:(FITUInt16)totalStrokes { + [super setFieldUINT16ValueForField:5 andValue:(totalStrokes) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgSpeed +- (BOOL)isAvgSpeedValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgSpeed { + return ([super getFieldFLOAT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgSpeed:(FITFloat32)avgSpeed { + [super setFieldFLOAT32ValueForField:6 andValue:(avgSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SwimStroke +- (BOOL)isSwimStrokeValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSwimStroke)getSwimStroke { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSwimStroke:(FITSwimStroke)swimStroke { + [super setFieldENUMValueForField:7 andValue:(swimStroke) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgSwimmingCadence +- (BOOL)isAvgSwimmingCadenceValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgSwimmingCadence { + return ([super getFieldUINT8ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgSwimmingCadence:(FITUInt8)avgSwimmingCadence { + [super setFieldUINT8ValueForField:9 andValue:(avgSwimmingCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventGroup +- (BOOL)isEventGroupValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEventGroup { + return ([super getFieldUINT8ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventGroup:(FITUInt8)eventGroup { + [super setFieldUINT8ValueForField:10 andValue:(eventGroup) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalCalories +- (BOOL)isTotalCaloriesValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalCalories { + return ([super getFieldUINT16ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCalories:(FITUInt16)totalCalories { + [super setFieldUINT16ValueForField:11 andValue:(totalCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LengthType +- (BOOL)isLengthTypeValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLengthType)getLengthType { + return ([super getFieldENUMValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLengthType:(FITLengthType)lengthType { + [super setFieldENUMValueForField:12 andValue:(lengthType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PlayerScore +- (BOOL)isPlayerScoreValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getPlayerScore { + return ([super getFieldUINT16ValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPlayerScore:(FITUInt16)playerScore { + [super setFieldUINT16ValueForField:18 andValue:(playerScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OpponentScore +- (BOOL)isOpponentScoreValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getOpponentScore { + return ([super getFieldUINT16ValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOpponentScore:(FITUInt16)opponentScore { + [super setFieldUINT16ValueForField:19 andValue:(opponentScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StrokeCount +- (uint8_t)numStrokeCountValues { + return [super getFieldNumValuesForField:20 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isStrokeCountValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStrokeCountforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:20 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStrokeCount:(FITUInt16)strokeCount forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:20 andValue:(strokeCount) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ZoneCount +- (uint8_t)numZoneCountValues { + return [super getFieldNumValuesForField:21 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isZoneCountValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getZoneCountforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:21 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setZoneCount:(FITUInt16)zoneCount forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:21 andValue:(zoneCount) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITMagnetometerDataMesg.mm b/Sources/ObjcFIT/FITMagnetometerDataMesg.mm new file mode 100644 index 0000000..050a47f --- /dev/null +++ b/Sources/ObjcFIT/FITMagnetometerDataMesg.mm @@ -0,0 +1,216 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITMagnetometerDataMesg.h" + +@implementation FITMagnetometerDataMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_MAGNETOMETER_DATA]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SampleTimeOffset +- (uint8_t)numSampleTimeOffsetValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSampleTimeOffsetValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSampleTimeOffsetforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:1 andValue:(sampleTimeOffset) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MagX +- (uint8_t)numMagXValues { + return [super getFieldNumValuesForField:2 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMagXValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMagXforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:2 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMagX:(FITUInt16)magX forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:2 andValue:(magX) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MagY +- (uint8_t)numMagYValues { + return [super getFieldNumValuesForField:3 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMagYValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMagYforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:3 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMagY:(FITUInt16)magY forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:3 andValue:(magY) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MagZ +- (uint8_t)numMagZValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMagZValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMagZforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMagZ:(FITUInt16)magZ forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:4 andValue:(magZ) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedMagX +- (uint8_t)numCalibratedMagXValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedMagXValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedMagXforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedMagX:(FITFloat32)calibratedMagX forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:5 andValue:(calibratedMagX) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedMagY +- (uint8_t)numCalibratedMagYValues { + return [super getFieldNumValuesForField:6 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedMagYValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedMagYforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:6 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedMagY:(FITFloat32)calibratedMagY forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:6 andValue:(calibratedMagY) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibratedMagZ +- (uint8_t)numCalibratedMagZValues { + return [super getFieldNumValuesForField:7 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCalibratedMagZValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalibratedMagZforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:7 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibratedMagZ:(FITFloat32)calibratedMagZ forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:7 andValue:(calibratedMagZ) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITMemoGlobMesg.mm b/Sources/ObjcFIT/FITMemoGlobMesg.mm new file mode 100644 index 0000000..d9af849 --- /dev/null +++ b/Sources/ObjcFIT/FITMemoGlobMesg.mm @@ -0,0 +1,142 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITMemoGlobMesg.h" + +@implementation FITMemoGlobMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_MEMO_GLOB]; + + return self; +} + +// PartIndex +- (BOOL)isPartIndexValid { + const fit::Field* field = [super getField:250]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getPartIndex { + return ([super getFieldUINT32ValueForField:250 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPartIndex:(FITUInt32)partIndex { + [super setFieldUINT32ValueForField:250 andValue:(partIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Memo +- (uint8_t)numMemoValues { + return [super getFieldNumValuesForField:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMemoValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getMemoforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:0 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMemo:(FITByte)memo forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:0 andValue:(memo) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MesgNum +- (BOOL)isMesgNumValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMesgNum)getMesgNum { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMesgNum:(FITMesgNum)mesgNum { + [super setFieldUINT16ValueForField:1 andValue:(mesgNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ParentIndex +- (BOOL)isParentIndexValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getParentIndex { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setParentIndex:(FITMessageIndex)parentIndex { + [super setFieldUINT16ValueForField:2 andValue:(parentIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FieldNum +- (BOOL)isFieldNumValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getFieldNum { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFieldNum:(FITUInt8)fieldNum { + [super setFieldUINT8ValueForField:3 andValue:(fieldNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Data +- (uint8_t)numDataValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isDataValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getDataforIndex:(uint8_t)index { + return ([super getFieldUINT8ZValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setData:(FITUInt8z)data forIndex:(uint8_t)index { + [super setFieldUINT8ZValueForField:4 andValue:(data) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITMesgCapabilitiesMesg.mm b/Sources/ObjcFIT/FITMesgCapabilitiesMesg.mm new file mode 100644 index 0000000..c78d191 --- /dev/null +++ b/Sources/ObjcFIT/FITMesgCapabilitiesMesg.mm @@ -0,0 +1,189 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITMesgCapabilitiesMesg.h" + +@implementation FITMesgCapabilitiesMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_MESG_CAPABILITIES]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// File +- (BOOL)isFileValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFile)getFile { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFile:(FITFile)file { + [super setFieldENUMValueForField:0 andValue:(file) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MesgNum +- (BOOL)isMesgNumValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMesgNum)getMesgNum { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMesgNum:(FITMesgNum)mesgNum { + [super setFieldUINT16ValueForField:1 andValue:(mesgNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CountType +- (BOOL)isCountTypeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMesgCount)getCountType { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCountType:(FITMesgCount)countType { + [super setFieldENUMValueForField:2 andValue:(countType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Count +- (BOOL)isCountValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCount { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCount:(FITUInt16)count { + [super setFieldUINT16ValueForField:3 andValue:(count) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Count - Sub Fields +// NumPerFile - Count Field - Sub Field +- (BOOL)isNumPerFileValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITMesgCapabilitiesMesgCountFieldNumPerFileSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITMesgCapabilitiesMesgCountFieldNumPerFileSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumPerFile +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITMesgCapabilitiesMesgCountFieldNumPerFileSubField]); +} + +- (void)setNumPerFile:(FITUInt16)numPerFile +{ + [super setFieldUINT16ValueForField:3 andValue:(numPerFile) forIndex:0 andSubFieldIndex:FITMesgCapabilitiesMesgCountFieldNumPerFileSubField]; +} +// MaxPerFile - Count Field - Sub Field +- (BOOL)isMaxPerFileValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITMesgCapabilitiesMesgCountFieldMaxPerFileSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITMesgCapabilitiesMesgCountFieldMaxPerFileSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPerFile +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITMesgCapabilitiesMesgCountFieldMaxPerFileSubField]); +} + +- (void)setMaxPerFile:(FITUInt16)maxPerFile +{ + [super setFieldUINT16ValueForField:3 andValue:(maxPerFile) forIndex:0 andSubFieldIndex:FITMesgCapabilitiesMesgCountFieldMaxPerFileSubField]; +} +// MaxPerFileType - Count Field - Sub Field +- (BOOL)isMaxPerFileTypeValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITMesgCapabilitiesMesgCountFieldMaxPerFileTypeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITMesgCapabilitiesMesgCountFieldMaxPerFileTypeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPerFileType +{ + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FITMesgCapabilitiesMesgCountFieldMaxPerFileTypeSubField]); +} + +- (void)setMaxPerFileType:(FITUInt16)maxPerFileType +{ + [super setFieldUINT16ValueForField:3 andValue:(maxPerFileType) forIndex:0 andSubFieldIndex:FITMesgCapabilitiesMesgCountFieldMaxPerFileTypeSubField]; +} + +@end diff --git a/Sources/ObjcFIT/FITMessage+Internal.h b/Sources/ObjcFIT/FITMessage+Internal.h new file mode 100644 index 0000000..d659427 --- /dev/null +++ b/Sources/ObjcFIT/FITMessage+Internal.h @@ -0,0 +1,23 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage.h" + +#import +#import + +@interface FITMessage () +-(instancetype)initWithFitMesgIndex:(fit::Profile::MESG_INDEX)index NS_DESIGNATED_INITIALIZER; +-(instancetype)initWithFitMesg:(fit::Mesg *)fit_mesg NS_DESIGNATED_INITIALIZER; +-(fit::Mesg *)getInternalFitMesg; +-(fit::Field *)getField:(FIT_UINT8)fieldNum; +@end diff --git a/Sources/ObjcFIT/FITMessage.mm b/Sources/ObjcFIT/FITMessage.mm new file mode 100644 index 0000000..c751ca0 --- /dev/null +++ b/Sources/ObjcFIT/FITMessage.mm @@ -0,0 +1,344 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" +#import "FITDeveloperFieldDef+Internal.h" +#import "FITString.h" + +#import +#import + +@interface FITMessage () +@property(nonatomic, assign) fit::Mesg *message; +@end + +@implementation FITMessage +- (instancetype)init { + self = [super init]; + if (self) { + _message = new fit::Mesg(FIT_NULL); + } + return self; +} + +- (instancetype)initWithMessage:(FITMessage *) message { + self = [super init]; + if (self) { + _message = new fit::Mesg(*[message getInternalFitMesg]); + } + return self; +} + +- (instancetype)initWithFitMesgIndex:(fit::Profile::MESG_INDEX)index { + self = [super init]; + if (self) { + _message = new fit::Mesg(index); + } + return self; +} + +- (instancetype)initWithFitMesg:(fit::Mesg *)fit_mesg { + self = [super init]; + if (self) { + _message = new fit::Mesg(*fit_mesg); + } + return self; +} + +- (void)dealloc { + delete _message; + _message = nullptr; +} + +- (fit::Mesg *)getInternalFitMesg { + return _message; +} + +- (fit::Field *)getField:(FIT_UINT8)fieldNum { + if(_message == nil) { + return nil; + } + return _message->GetField(fieldNum); +} + +-(FITMesgNum)getNum { + if(_message == nil) { + return FITMesgNumInvalid; + } + return (FITMesgNum)_message->GetNum(); +} + +-(FITUInt8) getFieldNumValuesForField:(FITUInt8)fieldNum andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil) { + return FITUInt8Invalid; + } + + return _message->GetFieldNumValues(fieldNum,subFieldIndex); +} + +-(FITBool) canField:(FITUInt8)fieldNum supportSubField:(FITUInt16)subFieldIndex { + if(_message == nil) { + return FITBoolFalse; + } + + return _message->CanSupportSubField(fieldNum,subFieldIndex); +} + +-(void)addDeveloperField:(FITDeveloperField *)developerField { + if(_message == nil) { + return; + } + + fit::DeveloperField *developer_field = [developerField fit_developer_field]; + _message->AddDeveloperField(*developer_field); +} + +-(NSArray*)getDeveloperFields { + NSMutableArray *developerFields = [[NSMutableArray alloc] init]; + + std::vector fit_developerFields = _message->GetDeveloperFields(); + + for(std::vector::iterator it = fit_developerFields.begin(); it != fit_developerFields.end(); ++it) { + FITFieldDescriptionMesg* description = [[FITFieldDescriptionMesg alloc] initWithFitMesg:(fit::Mesg*)&it->GetDefinition().GetDescription()]; + FITDeveloperDataIdMesg* developer = [[FITDeveloperDataIdMesg alloc] initWithFitMesg:(fit::Mesg*)&it->GetDefinition().GetDeveloper()]; + FITDeveloperField* developerField = [[FITDeveloperField alloc] initWithFieldDescriptionMesg:description andDeveloperDataIdMesg: developer]; + [developerFields addObject:developerField]; + + for(int i=0;iGetNumValues();i++) { + [developerField addValue:[NSNumber numberWithDouble:it->GetFLOAT64Value(i)] forIndex:i]; + } + } + + return [developerFields copy]; +} + +-(FITEnum)getFieldENUMValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITEnumInvalid; + } + return _message->GetFieldENUMValue(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITByte)getFieldBYTEValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITByteInvalid; + } + return _message->GetFieldBYTEValue(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITSInt8)getFieldSINT8ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITSInt8Invalid; + } + return _message->GetFieldSINT8Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt8)getFieldUINT8ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt8Invalid; + } + return _message->GetFieldUINT8Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt8z)getFieldUINT8ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt8zInvalid; + } + return _message->GetFieldUINT8ZValue(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITSInt16)getFieldSINT16ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITSInt16Invalid; + } + return _message->GetFieldSINT16Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt16)getFieldUINT16ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt16Invalid; + } + return _message->GetFieldUINT16Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt16z)getFieldUINT16ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt16zInvalid; + } + return _message->GetFieldUINT16ZValue(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITSInt32)getFieldSINT32ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITSInt32Invalid; + } + return _message->GetFieldSINT32Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt32)getFieldUINT32ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt32Invalid; + } + return _message->GetFieldUINT32Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt32z)getFieldUINT32ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt32zInvalid; + } + return _message->GetFieldUINT32ZValue(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITSInt64)getFieldSINT64ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITSInt64Invalid; + } + return _message->GetFieldSINT64Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt64)getFieldUINT64ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt64Invalid; + } + return _message->GetFieldUINT64Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITUInt64z)getFieldUINT64ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITUInt64zInvalid; + } + return _message->GetFieldUINT64ZValue(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITFloat32)getFieldFLOAT32ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITFloat32Invalid; + } + return _message->GetFieldFLOAT32Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(FITFloat64)getFieldFLOAT64ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message == nil){ + return FITFloat64Invalid; + } + return _message->GetFieldFLOAT64Value(fieldNum,fieldArrayIndex,subFieldIndex); +} + +-(NSString *)getFieldSTRINGValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message) { + return StringFromFITString(_message->GetFieldSTRINGValue(fieldNum,fieldArrayIndex,subFieldIndex)); + } + return nil; +} + +-(void)setFieldENUMValueForField:(FITUInt8)fieldNum andValue:(FITEnum)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex { + if(_message) { + _message->SetFieldENUMValue(fieldNum, value,fieldArrayIndex,subFieldIndex); + } +} + +-(void) setFieldBYTEValueForField: (FITUInt8) fieldNum andValue: (FITByte) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldBYTEValue(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +- (void) setFieldSINT8ValueForField: (FITUInt8) fieldNum andValue: (FITSInt8) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldSINT8Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldUINT8ValueForField: (FITUInt8) fieldNum andValue: (FITUInt8) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT8Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldUINT8ZValueForField: (FITUInt8) fieldNum andValue: (FITUInt8z) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT8ZValue(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldSINT16ValueForField: (FITUInt8) fieldNum andValue: (FITSInt16) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldSINT16Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldUINT16ValueForField: (FITUInt8) fieldNum andValue: (FITUInt16) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT16Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldUINT16ZValueForField: (FITUInt8) fieldNum andValue: (FITUInt16z) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT16ZValue(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldSINT32ValueForField: (FITUInt8) fieldNum andValue: (FITSInt32) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldSINT32Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} +-(void) setFieldUINT32ValueForField: (FITUInt8) fieldNum andValue: (FITUInt32) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT32Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldUINT32ZValueForField: (FITUInt8) fieldNum andValue: (FITUInt32z) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT32ZValue(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldSINT64ValueForField: (FITUInt8) fieldNum andValue: (FITSInt64) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldSINT64Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldUINT64ValueForField: (FITUInt8) fieldNum andValue: (FITUInt64) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT64Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldUINT64ZValueForField: (FITUInt8) fieldNum andValue: (FITUInt64z) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldUINT64ZValue(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldFLOAT32ValueForField: (FITUInt8) fieldNum andValue: (FITFloat32) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldFLOAT32Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void) setFieldFLOAT64ValueForField: (FITUInt8) fieldNum andValue: (FITFloat64) value forIndex: (uint8_t) fieldArrayIndex andSubFieldIndex: (FITUInt16) subFieldIndex { + if (_message) { + _message->SetFieldFLOAT64Value(fieldNum, value, fieldArrayIndex, subFieldIndex); + } +} + +-(void)setFieldSTRINGValueForField:(FITUInt8)fieldNum andValue:(NSString *)value forIndex:(uint8_t)fieldArrayIndex { + if (_message) { + _message->SetFieldSTRINGValue(fieldNum, FITStringFromString(value), 0); + } +} + +@end diff --git a/Sources/ObjcFIT/FITMessageBroadcaster.mm b/Sources/ObjcFIT/FITMessageBroadcaster.mm new file mode 100644 index 0000000..f1b2cbc --- /dev/null +++ b/Sources/ObjcFIT/FITMessageBroadcaster.mm @@ -0,0 +1,302 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + +#import "FITMessageBroadcaster.h" +#import "FITTypes.h" + +@implementation FITMessageBroadcaster + +- (instancetype)init { + self = [super init]; + if (self) { + + } + return self; +} + +- (void)onMesg:(FITMessage*)message { + [self.mesgDelegate onMesg:message]; + + switch ([message getNum]) { + case FITMesgNumFileId: + [self.fitFileIdMesgDelegate onFileIdMesg:[[FITFileIdMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumFileCreator: + [self.fitFileCreatorMesgDelegate onFileCreatorMesg:[[FITFileCreatorMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumTimestampCorrelation: + [self.fitTimestampCorrelationMesgDelegate onTimestampCorrelationMesg:[[FITTimestampCorrelationMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSoftware: + [self.fitSoftwareMesgDelegate onSoftwareMesg:[[FITSoftwareMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSlaveDevice: + [self.fitSlaveDeviceMesgDelegate onSlaveDeviceMesg:[[FITSlaveDeviceMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumCapabilities: + [self.fitCapabilitiesMesgDelegate onCapabilitiesMesg:[[FITCapabilitiesMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumFileCapabilities: + [self.fitFileCapabilitiesMesgDelegate onFileCapabilitiesMesg:[[FITFileCapabilitiesMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumMesgCapabilities: + [self.fitMesgCapabilitiesMesgDelegate onMesgCapabilitiesMesg:[[FITMesgCapabilitiesMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumFieldCapabilities: + [self.fitFieldCapabilitiesMesgDelegate onFieldCapabilitiesMesg:[[FITFieldCapabilitiesMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDeviceSettings: + [self.fitDeviceSettingsMesgDelegate onDeviceSettingsMesg:[[FITDeviceSettingsMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumUserProfile: + [self.fitUserProfileMesgDelegate onUserProfileMesg:[[FITUserProfileMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumHrmProfile: + [self.fitHrmProfileMesgDelegate onHrmProfileMesg:[[FITHrmProfileMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSdmProfile: + [self.fitSdmProfileMesgDelegate onSdmProfileMesg:[[FITSdmProfileMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumBikeProfile: + [self.fitBikeProfileMesgDelegate onBikeProfileMesg:[[FITBikeProfileMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumConnectivity: + [self.fitConnectivityMesgDelegate onConnectivityMesg:[[FITConnectivityMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumWatchfaceSettings: + [self.fitWatchfaceSettingsMesgDelegate onWatchfaceSettingsMesg:[[FITWatchfaceSettingsMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumOhrSettings: + [self.fitOhrSettingsMesgDelegate onOhrSettingsMesg:[[FITOhrSettingsMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumZonesTarget: + [self.fitZonesTargetMesgDelegate onZonesTargetMesg:[[FITZonesTargetMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSport: + [self.fitSportMesgDelegate onSportMesg:[[FITSportMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumHrZone: + [self.fitHrZoneMesgDelegate onHrZoneMesg:[[FITHrZoneMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSpeedZone: + [self.fitSpeedZoneMesgDelegate onSpeedZoneMesg:[[FITSpeedZoneMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumCadenceZone: + [self.fitCadenceZoneMesgDelegate onCadenceZoneMesg:[[FITCadenceZoneMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumPowerZone: + [self.fitPowerZoneMesgDelegate onPowerZoneMesg:[[FITPowerZoneMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumMetZone: + [self.fitMetZoneMesgDelegate onMetZoneMesg:[[FITMetZoneMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDiveSettings: + [self.fitDiveSettingsMesgDelegate onDiveSettingsMesg:[[FITDiveSettingsMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDiveAlarm: + [self.fitDiveAlarmMesgDelegate onDiveAlarmMesg:[[FITDiveAlarmMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDiveGas: + [self.fitDiveGasMesgDelegate onDiveGasMesg:[[FITDiveGasMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumGoal: + [self.fitGoalMesgDelegate onGoalMesg:[[FITGoalMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumActivity: + [self.fitActivityMesgDelegate onActivityMesg:[[FITActivityMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSession: + [self.fitSessionMesgDelegate onSessionMesg:[[FITSessionMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumLap: + [self.fitLapMesgDelegate onLapMesg:[[FITLapMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumLength: + [self.fitLengthMesgDelegate onLengthMesg:[[FITLengthMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumRecord: + [self.fitRecordMesgDelegate onRecordMesg:[[FITRecordMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumEvent: + [self.fitEventMesgDelegate onEventMesg:[[FITEventMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDeviceInfo: + [self.fitDeviceInfoMesgDelegate onDeviceInfoMesg:[[FITDeviceInfoMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDeviceAuxBatteryInfo: + [self.fitDeviceAuxBatteryInfoMesgDelegate onDeviceAuxBatteryInfoMesg:[[FITDeviceAuxBatteryInfoMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumTrainingFile: + [self.fitTrainingFileMesgDelegate onTrainingFileMesg:[[FITTrainingFileMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumWeatherConditions: + [self.fitWeatherConditionsMesgDelegate onWeatherConditionsMesg:[[FITWeatherConditionsMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumWeatherAlert: + [self.fitWeatherAlertMesgDelegate onWeatherAlertMesg:[[FITWeatherAlertMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumGpsMetadata: + [self.fitGpsMetadataMesgDelegate onGpsMetadataMesg:[[FITGpsMetadataMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumCameraEvent: + [self.fitCameraEventMesgDelegate onCameraEventMesg:[[FITCameraEventMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumGyroscopeData: + [self.fitGyroscopeDataMesgDelegate onGyroscopeDataMesg:[[FITGyroscopeDataMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumAccelerometerData: + [self.fitAccelerometerDataMesgDelegate onAccelerometerDataMesg:[[FITAccelerometerDataMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumMagnetometerData: + [self.fitMagnetometerDataMesgDelegate onMagnetometerDataMesg:[[FITMagnetometerDataMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumBarometerData: + [self.fitBarometerDataMesgDelegate onBarometerDataMesg:[[FITBarometerDataMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumThreeDSensorCalibration: + [self.fitThreeDSensorCalibrationMesgDelegate onThreeDSensorCalibrationMesg:[[FITThreeDSensorCalibrationMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumOneDSensorCalibration: + [self.fitOneDSensorCalibrationMesgDelegate onOneDSensorCalibrationMesg:[[FITOneDSensorCalibrationMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumVideoFrame: + [self.fitVideoFrameMesgDelegate onVideoFrameMesg:[[FITVideoFrameMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumObdiiData: + [self.fitObdiiDataMesgDelegate onObdiiDataMesg:[[FITObdiiDataMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumNmeaSentence: + [self.fitNmeaSentenceMesgDelegate onNmeaSentenceMesg:[[FITNmeaSentenceMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumAviationAttitude: + [self.fitAviationAttitudeMesgDelegate onAviationAttitudeMesg:[[FITAviationAttitudeMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumVideo: + [self.fitVideoMesgDelegate onVideoMesg:[[FITVideoMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumVideoTitle: + [self.fitVideoTitleMesgDelegate onVideoTitleMesg:[[FITVideoTitleMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumVideoDescription: + [self.fitVideoDescriptionMesgDelegate onVideoDescriptionMesg:[[FITVideoDescriptionMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumVideoClip: + [self.fitVideoClipMesgDelegate onVideoClipMesg:[[FITVideoClipMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSet: + [self.fitSetMesgDelegate onSetMesg:[[FITSetMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumJump: + [self.fitJumpMesgDelegate onJumpMesg:[[FITJumpMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumClimbPro: + [self.fitClimbProMesgDelegate onClimbProMesg:[[FITClimbProMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumFieldDescription: + [self.fitFieldDescriptionMesgDelegate onFieldDescriptionMesg:[[FITFieldDescriptionMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDeveloperDataId: + [self.fitDeveloperDataIdMesgDelegate onDeveloperDataIdMesg:[[FITDeveloperDataIdMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumCourse: + [self.fitCourseMesgDelegate onCourseMesg:[[FITCourseMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumCoursePoint: + [self.fitCoursePointMesgDelegate onCoursePointMesg:[[FITCoursePointMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSegmentId: + [self.fitSegmentIdMesgDelegate onSegmentIdMesg:[[FITSegmentIdMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSegmentLeaderboardEntry: + [self.fitSegmentLeaderboardEntryMesgDelegate onSegmentLeaderboardEntryMesg:[[FITSegmentLeaderboardEntryMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSegmentPoint: + [self.fitSegmentPointMesgDelegate onSegmentPointMesg:[[FITSegmentPointMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSegmentLap: + [self.fitSegmentLapMesgDelegate onSegmentLapMesg:[[FITSegmentLapMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSegmentFile: + [self.fitSegmentFileMesgDelegate onSegmentFileMesg:[[FITSegmentFileMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumWorkout: + [self.fitWorkoutMesgDelegate onWorkoutMesg:[[FITWorkoutMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumWorkoutSession: + [self.fitWorkoutSessionMesgDelegate onWorkoutSessionMesg:[[FITWorkoutSessionMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumWorkoutStep: + [self.fitWorkoutStepMesgDelegate onWorkoutStepMesg:[[FITWorkoutStepMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumExerciseTitle: + [self.fitExerciseTitleMesgDelegate onExerciseTitleMesg:[[FITExerciseTitleMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumSchedule: + [self.fitScheduleMesgDelegate onScheduleMesg:[[FITScheduleMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumTotals: + [self.fitTotalsMesgDelegate onTotalsMesg:[[FITTotalsMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumWeightScale: + [self.fitWeightScaleMesgDelegate onWeightScaleMesg:[[FITWeightScaleMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumBloodPressure: + [self.fitBloodPressureMesgDelegate onBloodPressureMesg:[[FITBloodPressureMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumMonitoringInfo: + [self.fitMonitoringInfoMesgDelegate onMonitoringInfoMesg:[[FITMonitoringInfoMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumMonitoring: + [self.fitMonitoringMesgDelegate onMonitoringMesg:[[FITMonitoringMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumHr: + [self.fitHrMesgDelegate onHrMesg:[[FITHrMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumStressLevel: + [self.fitStressLevelMesgDelegate onStressLevelMesg:[[FITStressLevelMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumMemoGlob: + [self.fitMemoGlobMesgDelegate onMemoGlobMesg:[[FITMemoGlobMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumAntChannelId: + [self.fitAntChannelIdMesgDelegate onAntChannelIdMesg:[[FITAntChannelIdMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumAntRx: + [self.fitAntRxMesgDelegate onAntRxMesg:[[FITAntRxMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumAntTx: + [self.fitAntTxMesgDelegate onAntTxMesg:[[FITAntTxMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumExdScreenConfiguration: + [self.fitExdScreenConfigurationMesgDelegate onExdScreenConfigurationMesg:[[FITExdScreenConfigurationMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumExdDataFieldConfiguration: + [self.fitExdDataFieldConfigurationMesgDelegate onExdDataFieldConfigurationMesg:[[FITExdDataFieldConfigurationMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumExdDataConceptConfiguration: + [self.fitExdDataConceptConfigurationMesgDelegate onExdDataConceptConfigurationMesg:[[FITExdDataConceptConfigurationMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumDiveSummary: + [self.fitDiveSummaryMesgDelegate onDiveSummaryMesg:[[FITDiveSummaryMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumHrv: + [self.fitHrvMesgDelegate onHrvMesg:[[FITHrvMesg alloc] initWithMessage:message]]; + break; + case FITMesgNumPad: + [self.fitPadMesgDelegate onPadMesg:[[FITPadMesg alloc] initWithMessage:message]]; + break; + + default: + break; + } +} + +@end diff --git a/Sources/ObjcFIT/FITMetZoneMesg.mm b/Sources/ObjcFIT/FITMetZoneMesg.mm new file mode 100644 index 0000000..67db60b --- /dev/null +++ b/Sources/ObjcFIT/FITMetZoneMesg.mm @@ -0,0 +1,98 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITMetZoneMesg.h" + +@implementation FITMetZoneMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_MET_ZONE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HighBpm +- (BOOL)isHighBpmValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHighBpm { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHighBpm:(FITUInt8)highBpm { + [super setFieldUINT8ValueForField:1 andValue:(highBpm) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Calories +- (BOOL)isCaloriesValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCalories { + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalories:(FITFloat32)calories { + [super setFieldFLOAT32ValueForField:2 andValue:(calories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FatCalories +- (BOOL)isFatCaloriesValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFatCalories { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFatCalories:(FITFloat32)fatCalories { + [super setFieldFLOAT32ValueForField:3 andValue:(fatCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITMonitoringInfoMesg.mm b/Sources/ObjcFIT/FITMonitoringInfoMesg.mm new file mode 100644 index 0000000..674f208 --- /dev/null +++ b/Sources/ObjcFIT/FITMonitoringInfoMesg.mm @@ -0,0 +1,146 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITMonitoringInfoMesg.h" + +@implementation FITMonitoringInfoMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_MONITORING_INFO]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LocalTimestamp +- (BOOL)isLocalTimestampValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocalDateTime)getLocalTimestamp { + return ([super getFieldUINT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp { + [super setFieldUINT32ValueForField:0 andValue:(localTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityType +- (uint8_t)numActivityTypeValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isActivityTypeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITActivityType)getActivityTypeforIndex:(uint8_t)index { + return ([super getFieldENUMValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityType:(FITActivityType)activityType forIndex:(uint8_t)index { + [super setFieldENUMValueForField:1 andValue:(activityType) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CyclesToDistance +- (uint8_t)numCyclesToDistanceValues { + return [super getFieldNumValuesForField:3 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCyclesToDistanceValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCyclesToDistanceforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:3 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCyclesToDistance:(FITFloat32)cyclesToDistance forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:3 andValue:(cyclesToDistance) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CyclesToCalories +- (uint8_t)numCyclesToCaloriesValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCyclesToCaloriesValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCyclesToCaloriesforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCyclesToCalories:(FITFloat32)cyclesToCalories forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:4 andValue:(cyclesToCalories) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RestingMetabolicRate +- (BOOL)isRestingMetabolicRateValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getRestingMetabolicRate { + return ([super getFieldUINT16ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRestingMetabolicRate:(FITUInt16)restingMetabolicRate { + [super setFieldUINT16ValueForField:5 andValue:(restingMetabolicRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITMonitoringMesg.mm b/Sources/ObjcFIT/FITMonitoringMesg.mm new file mode 100644 index 0000000..a5343fa --- /dev/null +++ b/Sources/ObjcFIT/FITMonitoringMesg.mm @@ -0,0 +1,601 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITMonitoringMesg.h" + +@implementation FITMonitoringMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_MONITORING]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceIndex +- (BOOL)isDeviceIndexValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDeviceIndex)getDeviceIndex { + return ([super getFieldUINT8ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex { + [super setFieldUINT8ValueForField:0 andValue:(deviceIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Calories +- (BOOL)isCaloriesValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCalories { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalories:(FITUInt16)calories { + [super setFieldUINT16ValueForField:1 andValue:(calories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Distance +- (BOOL)isDistanceValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDistance { + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistance:(FITFloat32)distance { + [super setFieldFLOAT32ValueForField:2 andValue:(distance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Cycles +- (BOOL)isCyclesValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCycles { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCycles:(FITFloat32)cycles { + [super setFieldFLOAT32ValueForField:3 andValue:(cycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Cycles - Sub Fields +// Steps - Cycles Field - Sub Field +- (BOOL)isStepsValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITMonitoringMesgCyclesFieldStepsSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITMonitoringMesgCyclesFieldStepsSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSteps +{ + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FITMonitoringMesgCyclesFieldStepsSubField]); +} + +- (void)setSteps:(FITUInt32)steps +{ + [super setFieldUINT32ValueForField:3 andValue:(steps) forIndex:0 andSubFieldIndex:FITMonitoringMesgCyclesFieldStepsSubField]; +} +// Strokes - Cycles Field - Sub Field +- (BOOL)isStrokesValid +{ + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:3 supportSubField:(FITUInt16)FITMonitoringMesgCyclesFieldStrokesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITMonitoringMesgCyclesFieldStrokesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getStrokes +{ + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FITMonitoringMesgCyclesFieldStrokesSubField]); +} + +- (void)setStrokes:(FITFloat32)strokes +{ + [super setFieldFLOAT32ValueForField:3 andValue:(strokes) forIndex:0 andSubFieldIndex:FITMonitoringMesgCyclesFieldStrokesSubField]; +} + +// ActiveTime +- (BOOL)isActiveTimeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getActiveTime { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActiveTime:(FITFloat32)activeTime { + [super setFieldFLOAT32ValueForField:4 andValue:(activeTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityType +- (BOOL)isActivityTypeValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITActivityType)getActivityType { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityType:(FITActivityType)activityType { + [super setFieldENUMValueForField:5 andValue:(activityType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivitySubtype +- (BOOL)isActivitySubtypeValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITActivitySubtype)getActivitySubtype { + return ([super getFieldENUMValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivitySubtype:(FITActivitySubtype)activitySubtype { + [super setFieldENUMValueForField:6 andValue:(activitySubtype) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityLevel +- (BOOL)isActivityLevelValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITActivityLevel)getActivityLevel { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityLevel:(FITActivityLevel)activityLevel { + [super setFieldENUMValueForField:7 andValue:(activityLevel) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Distance16 +- (BOOL)isDistance16Valid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getDistance16 { + return ([super getFieldUINT16ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistance16:(FITUInt16)distance16 { + [super setFieldUINT16ValueForField:8 andValue:(distance16) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Cycles16 +- (BOOL)isCycles16Valid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCycles16 { + return ([super getFieldUINT16ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCycles16:(FITUInt16)cycles16 { + [super setFieldUINT16ValueForField:9 andValue:(cycles16) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActiveTime16 +- (BOOL)isActiveTime16Valid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getActiveTime16 { + return ([super getFieldUINT16ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActiveTime16:(FITUInt16)activeTime16 { + [super setFieldUINT16ValueForField:10 andValue:(activeTime16) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LocalTimestamp +- (BOOL)isLocalTimestampValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocalDateTime)getLocalTimestamp { + return ([super getFieldUINT32ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp { + [super setFieldUINT32ValueForField:11 andValue:(localTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Temperature +- (BOOL)isTemperatureValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTemperature { + return ([super getFieldFLOAT32ValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTemperature:(FITFloat32)temperature { + [super setFieldFLOAT32ValueForField:12 andValue:(temperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TemperatureMin +- (BOOL)isTemperatureMinValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTemperatureMin { + return ([super getFieldFLOAT32ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTemperatureMin:(FITFloat32)temperatureMin { + [super setFieldFLOAT32ValueForField:14 andValue:(temperatureMin) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TemperatureMax +- (BOOL)isTemperatureMaxValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTemperatureMax { + return ([super getFieldFLOAT32ValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTemperatureMax:(FITFloat32)temperatureMax { + [super setFieldFLOAT32ValueForField:15 andValue:(temperatureMax) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityTime +- (uint8_t)numActivityTimeValues { + return [super getFieldNumValuesForField:16 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isActivityTimeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:16]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getActivityTimeforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:16 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityTime:(FITUInt16)activityTime forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:16 andValue:(activityTime) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActiveCalories +- (BOOL)isActiveCaloriesValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getActiveCalories { + return ([super getFieldUINT16ValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActiveCalories:(FITUInt16)activeCalories { + [super setFieldUINT16ValueForField:19 andValue:(activeCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CurrentActivityTypeIntensity +- (BOOL)isCurrentActivityTypeIntensityValid { + const fit::Field* field = [super getField:24]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getCurrentActivityTypeIntensity { + return ([super getFieldBYTEValueForField:24 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCurrentActivityTypeIntensity:(FITByte)currentActivityTypeIntensity { + [super setFieldBYTEValueForField:24 andValue:(currentActivityTypeIntensity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMin8 +- (BOOL)isTimestampMin8Valid { + const fit::Field* field = [super getField:25]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getTimestampMin8 { + return ([super getFieldUINT8ValueForField:25 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMin8:(FITUInt8)timestampMin8 { + [super setFieldUINT8ValueForField:25 andValue:(timestampMin8) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Timestamp16 +- (BOOL)isTimestamp16Valid { + const fit::Field* field = [super getField:26]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestamp16 { + return ([super getFieldUINT16ValueForField:26 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp16:(FITUInt16)timestamp16 { + [super setFieldUINT16ValueForField:26 andValue:(timestamp16) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeartRate +- (BOOL)isHeartRateValid { + const fit::Field* field = [super getField:27]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHeartRate { + return ([super getFieldUINT8ValueForField:27 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeartRate:(FITUInt8)heartRate { + [super setFieldUINT8ValueForField:27 andValue:(heartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Intensity +- (BOOL)isIntensityValid { + const fit::Field* field = [super getField:28]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getIntensity { + return ([super getFieldFLOAT32ValueForField:28 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setIntensity:(FITFloat32)intensity { + [super setFieldFLOAT32ValueForField:28 andValue:(intensity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DurationMin +- (BOOL)isDurationMinValid { + const fit::Field* field = [super getField:29]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getDurationMin { + return ([super getFieldUINT16ValueForField:29 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDurationMin:(FITUInt16)durationMin { + [super setFieldUINT16ValueForField:29 andValue:(durationMin) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Duration +- (BOOL)isDurationValid { + const fit::Field* field = [super getField:30]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDuration { + return ([super getFieldUINT32ValueForField:30 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDuration:(FITUInt32)duration { + [super setFieldUINT32ValueForField:30 andValue:(duration) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Ascent +- (BOOL)isAscentValid { + const fit::Field* field = [super getField:31]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAscent { + return ([super getFieldFLOAT32ValueForField:31 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAscent:(FITFloat32)ascent { + [super setFieldFLOAT32ValueForField:31 andValue:(ascent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Descent +- (BOOL)isDescentValid { + const fit::Field* field = [super getField:32]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDescent { + return ([super getFieldFLOAT32ValueForField:32 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDescent:(FITFloat32)descent { + [super setFieldFLOAT32ValueForField:32 andValue:(descent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ModerateActivityMinutes +- (BOOL)isModerateActivityMinutesValid { + const fit::Field* field = [super getField:33]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getModerateActivityMinutes { + return ([super getFieldUINT16ValueForField:33 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setModerateActivityMinutes:(FITUInt16)moderateActivityMinutes { + [super setFieldUINT16ValueForField:33 andValue:(moderateActivityMinutes) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// VigorousActivityMinutes +- (BOOL)isVigorousActivityMinutesValid { + const fit::Field* field = [super getField:34]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getVigorousActivityMinutes { + return ([super getFieldUINT16ValueForField:34 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVigorousActivityMinutes:(FITUInt16)vigorousActivityMinutes { + [super setFieldUINT16ValueForField:34 andValue:(vigorousActivityMinutes) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITNmeaSentenceMesg.mm b/Sources/ObjcFIT/FITNmeaSentenceMesg.mm new file mode 100644 index 0000000..d9f6aef --- /dev/null +++ b/Sources/ObjcFIT/FITNmeaSentenceMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITNmeaSentenceMesg.h" + +@implementation FITNmeaSentenceMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_NMEA_SENTENCE]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sentence +- (BOOL)isSentenceValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getSentence { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSentence:(NSString *)sentence { + [super setFieldSTRINGValueForField:1 andValue:(sentence) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITObdiiDataMesg.mm b/Sources/ObjcFIT/FITObdiiDataMesg.mm new file mode 100644 index 0000000..cbf462c --- /dev/null +++ b/Sources/ObjcFIT/FITObdiiDataMesg.mm @@ -0,0 +1,204 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITObdiiDataMesg.h" + +@implementation FITObdiiDataMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_OBDII_DATA]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeOffset +- (uint8_t)numTimeOffsetValues { + return [super getFieldNumValuesForField:1 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeOffsetValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimeOffsetforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:1 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeOffset:(FITUInt16)timeOffset forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:1 andValue:(timeOffset) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Pid +- (BOOL)isPidValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getPid { + return ([super getFieldBYTEValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPid:(FITByte)pid { + [super setFieldBYTEValueForField:2 andValue:(pid) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RawData +- (uint8_t)numRawDataValues { + return [super getFieldNumValuesForField:3 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isRawDataValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getRawDataforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:3 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRawData:(FITByte)rawData forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:3 andValue:(rawData) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PidDataSize +- (uint8_t)numPidDataSizeValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isPidDataSizeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getPidDataSizeforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPidDataSize:(FITUInt8)pidDataSize forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:4 andValue:(pidDataSize) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SystemTime +- (uint8_t)numSystemTimeValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSystemTimeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSystemTimeforIndex:(uint8_t)index { + return ([super getFieldUINT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSystemTime:(FITUInt32)systemTime forIndex:(uint8_t)index { + [super setFieldUINT32ValueForField:5 andValue:(systemTime) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTimestamp +- (BOOL)isStartTimestampValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTimestamp:(FITDate *)startTimestamp { + [super setFieldUINT32ValueForField:6 andValue:TimestampFromFITDate(startTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTimestampMs +- (BOOL)isStartTimestampMsValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStartTimestampMs { + return ([super getFieldUINT16ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTimestampMs:(FITUInt16)startTimestampMs { + [super setFieldUINT16ValueForField:7 andValue:(startTimestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITOhrSettingsMesg.mm b/Sources/ObjcFIT/FITOhrSettingsMesg.mm new file mode 100644 index 0000000..3e89700 --- /dev/null +++ b/Sources/ObjcFIT/FITOhrSettingsMesg.mm @@ -0,0 +1,62 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITOhrSettingsMesg.h" + +@implementation FITOhrSettingsMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_OHR_SETTINGS]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSwitch)getEnabled { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITSwitch)enabled { + [super setFieldENUMValueForField:0 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITOneDSensorCalibrationMesg.mm b/Sources/ObjcFIT/FITOneDSensorCalibrationMesg.mm new file mode 100644 index 0000000..531ec37 --- /dev/null +++ b/Sources/ObjcFIT/FITOneDSensorCalibrationMesg.mm @@ -0,0 +1,159 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITOneDSensorCalibrationMesg.h" + +@implementation FITOneDSensorCalibrationMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_ONE_D_SENSOR_CALIBRATION]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SensorType +- (BOOL)isSensorTypeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSensorType)getSensorType { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSensorType:(FITSensorType)sensorType { + [super setFieldENUMValueForField:0 andValue:(sensorType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibrationFactor +- (BOOL)isCalibrationFactorValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCalibrationFactor { + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibrationFactor:(FITUInt32)calibrationFactor { + [super setFieldUINT32ValueForField:1 andValue:(calibrationFactor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// CalibrationFactor - Sub Fields +// BaroCalFactor - CalibrationFactor Field - Sub Field +- (BOOL)isBaroCalFactorValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITOneDSensorCalibrationMesgCalibrationFactorFieldBaroCalFactorSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITOneDSensorCalibrationMesgCalibrationFactorFieldBaroCalFactorSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getBaroCalFactor +{ + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FITOneDSensorCalibrationMesgCalibrationFactorFieldBaroCalFactorSubField]); +} + +- (void)setBaroCalFactor:(FITUInt32)baroCalFactor +{ + [super setFieldUINT32ValueForField:1 andValue:(baroCalFactor) forIndex:0 andSubFieldIndex:FITOneDSensorCalibrationMesgCalibrationFactorFieldBaroCalFactorSubField]; +} + +// CalibrationDivisor +- (BOOL)isCalibrationDivisorValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCalibrationDivisor { + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibrationDivisor:(FITUInt32)calibrationDivisor { + [super setFieldUINT32ValueForField:2 andValue:(calibrationDivisor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LevelShift +- (BOOL)isLevelShiftValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getLevelShift { + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLevelShift:(FITUInt32)levelShift { + [super setFieldUINT32ValueForField:3 andValue:(levelShift) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OffsetCal +- (BOOL)isOffsetCalValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getOffsetCal { + return ([super getFieldSINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOffsetCal:(FITSInt32)offsetCal { + [super setFieldSINT32ValueForField:4 andValue:(offsetCal) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITPadMesg.mm b/Sources/ObjcFIT/FITPadMesg.mm new file mode 100644 index 0000000..570d680 --- /dev/null +++ b/Sources/ObjcFIT/FITPadMesg.mm @@ -0,0 +1,26 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITPadMesg.h" + +@implementation FITPadMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_PAD]; + + return self; +} + +@end diff --git a/Sources/ObjcFIT/FITPowerZoneMesg.mm b/Sources/ObjcFIT/FITPowerZoneMesg.mm new file mode 100644 index 0000000..2179adc --- /dev/null +++ b/Sources/ObjcFIT/FITPowerZoneMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITPowerZoneMesg.h" + +@implementation FITPowerZoneMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_POWER_ZONE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HighValue +- (BOOL)isHighValueValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getHighValue { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHighValue:(FITUInt16)highValue { + [super setFieldUINT16ValueForField:1 andValue:(highValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:2 andValue:(name) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITRecordMesg.mm b/Sources/ObjcFIT/FITRecordMesg.mm new file mode 100644 index 0000000..2e93567 --- /dev/null +++ b/Sources/ObjcFIT/FITRecordMesg.mm @@ -0,0 +1,1382 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITRecordMesg.h" + +@implementation FITRecordMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_RECORD]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLat +- (BOOL)isPositionLatValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLat { + return ([super getFieldSINT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLat:(FITSInt32)positionLat { + [super setFieldSINT32ValueForField:0 andValue:(positionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLong +- (BOOL)isPositionLongValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLong { + return ([super getFieldSINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLong:(FITSInt32)positionLong { + [super setFieldSINT32ValueForField:1 andValue:(positionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Altitude +- (BOOL)isAltitudeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAltitude { + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAltitude:(FITFloat32)altitude { + [super setFieldFLOAT32ValueForField:2 andValue:(altitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeartRate +- (BOOL)isHeartRateValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getHeartRate { + return ([super getFieldUINT8ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeartRate:(FITUInt8)heartRate { + [super setFieldUINT8ValueForField:3 andValue:(heartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Cadence +- (BOOL)isCadenceValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getCadence { + return ([super getFieldUINT8ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCadence:(FITUInt8)cadence { + [super setFieldUINT8ValueForField:4 andValue:(cadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Distance +- (BOOL)isDistanceValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDistance { + return ([super getFieldFLOAT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistance:(FITFloat32)distance { + [super setFieldFLOAT32ValueForField:5 andValue:(distance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Speed +- (BOOL)isSpeedValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSpeed { + return ([super getFieldFLOAT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSpeed:(FITFloat32)speed { + [super setFieldFLOAT32ValueForField:6 andValue:(speed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Power +- (BOOL)isPowerValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getPower { + return ([super getFieldUINT16ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPower:(FITUInt16)power { + [super setFieldUINT16ValueForField:7 andValue:(power) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CompressedSpeedDistance +- (uint8_t)numCompressedSpeedDistanceValues { + return [super getFieldNumValuesForField:8 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCompressedSpeedDistanceValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getCompressedSpeedDistanceforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:8 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCompressedSpeedDistance:(FITByte)compressedSpeedDistance forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:8 andValue:(compressedSpeedDistance) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Grade +- (BOOL)isGradeValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getGrade { + return ([super getFieldFLOAT32ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGrade:(FITFloat32)grade { + [super setFieldFLOAT32ValueForField:9 andValue:(grade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Resistance +- (BOOL)isResistanceValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getResistance { + return ([super getFieldUINT8ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setResistance:(FITUInt8)resistance { + [super setFieldUINT8ValueForField:10 andValue:(resistance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeFromCourse +- (BOOL)isTimeFromCourseValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeFromCourse { + return ([super getFieldFLOAT32ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeFromCourse:(FITFloat32)timeFromCourse { + [super setFieldFLOAT32ValueForField:11 andValue:(timeFromCourse) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CycleLength +- (BOOL)isCycleLengthValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCycleLength { + return ([super getFieldFLOAT32ValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCycleLength:(FITFloat32)cycleLength { + [super setFieldFLOAT32ValueForField:12 andValue:(cycleLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Temperature +- (BOOL)isTemperatureValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getTemperature { + return ([super getFieldSINT8ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTemperature:(FITSInt8)temperature { + [super setFieldSINT8ValueForField:13 andValue:(temperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Speed1s +- (uint8_t)numSpeed1sValues { + return [super getFieldNumValuesForField:17 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isSpeed1sValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSpeed1sforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:17 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSpeed1s:(FITFloat32)speed1s forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:17 andValue:(speed1s) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Cycles +- (BOOL)isCyclesValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getCycles { + return ([super getFieldUINT8ValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCycles:(FITUInt8)cycles { + [super setFieldUINT8ValueForField:18 andValue:(cycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalCycles +- (BOOL)isTotalCyclesValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalCycles { + return ([super getFieldUINT32ValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCycles:(FITUInt32)totalCycles { + [super setFieldUINT32ValueForField:19 andValue:(totalCycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CompressedAccumulatedPower +- (BOOL)isCompressedAccumulatedPowerValid { + const fit::Field* field = [super getField:28]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCompressedAccumulatedPower { + return ([super getFieldUINT16ValueForField:28 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCompressedAccumulatedPower:(FITUInt16)compressedAccumulatedPower { + [super setFieldUINT16ValueForField:28 andValue:(compressedAccumulatedPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AccumulatedPower +- (BOOL)isAccumulatedPowerValid { + const fit::Field* field = [super getField:29]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getAccumulatedPower { + return ([super getFieldUINT32ValueForField:29 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAccumulatedPower:(FITUInt32)accumulatedPower { + [super setFieldUINT32ValueForField:29 andValue:(accumulatedPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid { + const fit::Field* field = [super getField:30]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLeftRightBalance)getLeftRightBalance { + return ([super getFieldUINT8ValueForField:30 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftRightBalance:(FITLeftRightBalance)leftRightBalance { + [super setFieldUINT8ValueForField:30 andValue:(leftRightBalance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GpsAccuracy +- (BOOL)isGpsAccuracyValid { + const fit::Field* field = [super getField:31]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getGpsAccuracy { + return ([super getFieldUINT8ValueForField:31 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy { + [super setFieldUINT8ValueForField:31 andValue:(gpsAccuracy) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// VerticalSpeed +- (BOOL)isVerticalSpeedValid { + const fit::Field* field = [super getField:32]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:32 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVerticalSpeed:(FITFloat32)verticalSpeed { + [super setFieldFLOAT32ValueForField:32 andValue:(verticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Calories +- (BOOL)isCaloriesValid { + const fit::Field* field = [super getField:33]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCalories { + return ([super getFieldUINT16ValueForField:33 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalories:(FITUInt16)calories { + [super setFieldUINT16ValueForField:33 andValue:(calories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// VerticalOscillation +- (BOOL)isVerticalOscillationValid { + const fit::Field* field = [super getField:39]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getVerticalOscillation { + return ([super getFieldFLOAT32ValueForField:39 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVerticalOscillation:(FITFloat32)verticalOscillation { + [super setFieldFLOAT32ValueForField:39 andValue:(verticalOscillation) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StanceTimePercent +- (BOOL)isStanceTimePercentValid { + const fit::Field* field = [super getField:40]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getStanceTimePercent { + return ([super getFieldFLOAT32ValueForField:40 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStanceTimePercent:(FITFloat32)stanceTimePercent { + [super setFieldFLOAT32ValueForField:40 andValue:(stanceTimePercent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StanceTime +- (BOOL)isStanceTimeValid { + const fit::Field* field = [super getField:41]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getStanceTime { + return ([super getFieldFLOAT32ValueForField:41 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStanceTime:(FITFloat32)stanceTime { + [super setFieldFLOAT32ValueForField:41 andValue:(stanceTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityType +- (BOOL)isActivityTypeValid { + const fit::Field* field = [super getField:42]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITActivityType)getActivityType { + return ([super getFieldENUMValueForField:42 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityType:(FITActivityType)activityType { + [super setFieldENUMValueForField:42 andValue:(activityType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftTorqueEffectiveness +- (BOOL)isLeftTorqueEffectivenessValid { + const fit::Field* field = [super getField:43]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getLeftTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:43 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftTorqueEffectiveness:(FITFloat32)leftTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:43 andValue:(leftTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RightTorqueEffectiveness +- (BOOL)isRightTorqueEffectivenessValid { + const fit::Field* field = [super getField:44]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRightTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:44 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRightTorqueEffectiveness:(FITFloat32)rightTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:44 andValue:(rightTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftPedalSmoothness +- (BOOL)isLeftPedalSmoothnessValid { + const fit::Field* field = [super getField:45]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getLeftPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:45 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftPedalSmoothness:(FITFloat32)leftPedalSmoothness { + [super setFieldFLOAT32ValueForField:45 andValue:(leftPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RightPedalSmoothness +- (BOOL)isRightPedalSmoothnessValid { + const fit::Field* field = [super getField:46]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRightPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:46 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRightPedalSmoothness:(FITFloat32)rightPedalSmoothness { + [super setFieldFLOAT32ValueForField:46 andValue:(rightPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CombinedPedalSmoothness +- (BOOL)isCombinedPedalSmoothnessValid { + const fit::Field* field = [super getField:47]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCombinedPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:47 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCombinedPedalSmoothness:(FITFloat32)combinedPedalSmoothness { + [super setFieldFLOAT32ValueForField:47 andValue:(combinedPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Time128 +- (BOOL)isTime128Valid { + const fit::Field* field = [super getField:48]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTime128 { + return ([super getFieldFLOAT32ValueForField:48 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTime128:(FITFloat32)time128 { + [super setFieldFLOAT32ValueForField:48 andValue:(time128) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StrokeType +- (BOOL)isStrokeTypeValid { + const fit::Field* field = [super getField:49]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITStrokeType)getStrokeType { + return ([super getFieldENUMValueForField:49 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStrokeType:(FITStrokeType)strokeType { + [super setFieldENUMValueForField:49 andValue:(strokeType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Zone +- (BOOL)isZoneValid { + const fit::Field* field = [super getField:50]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getZone { + return ([super getFieldUINT8ValueForField:50 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setZone:(FITUInt8)zone { + [super setFieldUINT8ValueForField:50 andValue:(zone) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BallSpeed +- (BOOL)isBallSpeedValid { + const fit::Field* field = [super getField:51]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBallSpeed { + return ([super getFieldFLOAT32ValueForField:51 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBallSpeed:(FITFloat32)ballSpeed { + [super setFieldFLOAT32ValueForField:51 andValue:(ballSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Cadence256 +- (BOOL)isCadence256Valid { + const fit::Field* field = [super getField:52]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCadence256 { + return ([super getFieldFLOAT32ValueForField:52 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCadence256:(FITFloat32)cadence256 { + [super setFieldFLOAT32ValueForField:52 andValue:(cadence256) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FractionalCadence +- (BOOL)isFractionalCadenceValid { + const fit::Field* field = [super getField:53]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFractionalCadence { + return ([super getFieldFLOAT32ValueForField:53 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFractionalCadence:(FITFloat32)fractionalCadence { + [super setFieldFLOAT32ValueForField:53 andValue:(fractionalCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalHemoglobinConc +- (BOOL)isTotalHemoglobinConcValid { + const fit::Field* field = [super getField:54]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalHemoglobinConc { + return ([super getFieldFLOAT32ValueForField:54 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalHemoglobinConc:(FITFloat32)totalHemoglobinConc { + [super setFieldFLOAT32ValueForField:54 andValue:(totalHemoglobinConc) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalHemoglobinConcMin +- (BOOL)isTotalHemoglobinConcMinValid { + const fit::Field* field = [super getField:55]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalHemoglobinConcMin { + return ([super getFieldFLOAT32ValueForField:55 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalHemoglobinConcMin:(FITFloat32)totalHemoglobinConcMin { + [super setFieldFLOAT32ValueForField:55 andValue:(totalHemoglobinConcMin) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalHemoglobinConcMax +- (BOOL)isTotalHemoglobinConcMaxValid { + const fit::Field* field = [super getField:56]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalHemoglobinConcMax { + return ([super getFieldFLOAT32ValueForField:56 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalHemoglobinConcMax:(FITFloat32)totalHemoglobinConcMax { + [super setFieldFLOAT32ValueForField:56 andValue:(totalHemoglobinConcMax) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SaturatedHemoglobinPercent +- (BOOL)isSaturatedHemoglobinPercentValid { + const fit::Field* field = [super getField:57]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSaturatedHemoglobinPercent { + return ([super getFieldFLOAT32ValueForField:57 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSaturatedHemoglobinPercent:(FITFloat32)saturatedHemoglobinPercent { + [super setFieldFLOAT32ValueForField:57 andValue:(saturatedHemoglobinPercent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SaturatedHemoglobinPercentMin +- (BOOL)isSaturatedHemoglobinPercentMinValid { + const fit::Field* field = [super getField:58]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSaturatedHemoglobinPercentMin { + return ([super getFieldFLOAT32ValueForField:58 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSaturatedHemoglobinPercentMin:(FITFloat32)saturatedHemoglobinPercentMin { + [super setFieldFLOAT32ValueForField:58 andValue:(saturatedHemoglobinPercentMin) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SaturatedHemoglobinPercentMax +- (BOOL)isSaturatedHemoglobinPercentMaxValid { + const fit::Field* field = [super getField:59]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSaturatedHemoglobinPercentMax { + return ([super getFieldFLOAT32ValueForField:59 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSaturatedHemoglobinPercentMax:(FITFloat32)saturatedHemoglobinPercentMax { + [super setFieldFLOAT32ValueForField:59 andValue:(saturatedHemoglobinPercentMax) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceIndex +- (BOOL)isDeviceIndexValid { + const fit::Field* field = [super getField:62]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDeviceIndex)getDeviceIndex { + return ([super getFieldUINT8ValueForField:62 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex { + [super setFieldUINT8ValueForField:62 andValue:(deviceIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftPco +- (BOOL)isLeftPcoValid { + const fit::Field* field = [super getField:67]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getLeftPco { + return ([super getFieldSINT8ValueForField:67 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftPco:(FITSInt8)leftPco { + [super setFieldSINT8ValueForField:67 andValue:(leftPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RightPco +- (BOOL)isRightPcoValid { + const fit::Field* field = [super getField:68]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getRightPco { + return ([super getFieldSINT8ValueForField:68 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRightPco:(FITSInt8)rightPco { + [super setFieldSINT8ValueForField:68 andValue:(rightPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftPowerPhase +- (uint8_t)numLeftPowerPhaseValues { + return [super getFieldNumValuesForField:69 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLeftPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:69]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getLeftPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:69 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftPowerPhase:(FITFloat32)leftPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:69 andValue:(leftPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftPowerPhasePeak +- (uint8_t)numLeftPowerPhasePeakValues { + return [super getFieldNumValuesForField:70 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLeftPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:70]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getLeftPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:70 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftPowerPhasePeak:(FITFloat32)leftPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:70 andValue:(leftPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RightPowerPhase +- (uint8_t)numRightPowerPhaseValues { + return [super getFieldNumValuesForField:71 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isRightPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:71]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRightPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:71 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRightPowerPhase:(FITFloat32)rightPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:71 andValue:(rightPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RightPowerPhasePeak +- (uint8_t)numRightPowerPhasePeakValues { + return [super getFieldNumValuesForField:72 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isRightPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:72]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRightPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:72 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRightPowerPhasePeak:(FITFloat32)rightPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:72 andValue:(rightPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedSpeed +- (BOOL)isEnhancedSpeedValid { + const fit::Field* field = [super getField:73]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedSpeed { + return ([super getFieldFLOAT32ValueForField:73 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedSpeed:(FITFloat32)enhancedSpeed { + [super setFieldFLOAT32ValueForField:73 andValue:(enhancedSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedAltitude +- (BOOL)isEnhancedAltitudeValid { + const fit::Field* field = [super getField:78]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedAltitude { + return ([super getFieldFLOAT32ValueForField:78 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedAltitude:(FITFloat32)enhancedAltitude { + [super setFieldFLOAT32ValueForField:78 andValue:(enhancedAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BatterySoc +- (BOOL)isBatterySocValid { + const fit::Field* field = [super getField:81]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBatterySoc { + return ([super getFieldFLOAT32ValueForField:81 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBatterySoc:(FITFloat32)batterySoc { + [super setFieldFLOAT32ValueForField:81 andValue:(batterySoc) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MotorPower +- (BOOL)isMotorPowerValid { + const fit::Field* field = [super getField:82]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMotorPower { + return ([super getFieldUINT16ValueForField:82 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMotorPower:(FITUInt16)motorPower { + [super setFieldUINT16ValueForField:82 andValue:(motorPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// VerticalRatio +- (BOOL)isVerticalRatioValid { + const fit::Field* field = [super getField:83]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getVerticalRatio { + return ([super getFieldFLOAT32ValueForField:83 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVerticalRatio:(FITFloat32)verticalRatio { + [super setFieldFLOAT32ValueForField:83 andValue:(verticalRatio) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StanceTimeBalance +- (BOOL)isStanceTimeBalanceValid { + const fit::Field* field = [super getField:84]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getStanceTimeBalance { + return ([super getFieldFLOAT32ValueForField:84 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStanceTimeBalance:(FITFloat32)stanceTimeBalance { + [super setFieldFLOAT32ValueForField:84 andValue:(stanceTimeBalance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StepLength +- (BOOL)isStepLengthValid { + const fit::Field* field = [super getField:85]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getStepLength { + return ([super getFieldFLOAT32ValueForField:85 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStepLength:(FITFloat32)stepLength { + [super setFieldFLOAT32ValueForField:85 andValue:(stepLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AbsolutePressure +- (BOOL)isAbsolutePressureValid { + const fit::Field* field = [super getField:91]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getAbsolutePressure { + return ([super getFieldUINT32ValueForField:91 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAbsolutePressure:(FITUInt32)absolutePressure { + [super setFieldUINT32ValueForField:91 andValue:(absolutePressure) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Depth +- (BOOL)isDepthValid { + const fit::Field* field = [super getField:92]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDepth { + return ([super getFieldFLOAT32ValueForField:92 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDepth:(FITFloat32)depth { + [super setFieldFLOAT32ValueForField:92 andValue:(depth) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NextStopDepth +- (BOOL)isNextStopDepthValid { + const fit::Field* field = [super getField:93]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getNextStopDepth { + return ([super getFieldFLOAT32ValueForField:93 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNextStopDepth:(FITFloat32)nextStopDepth { + [super setFieldFLOAT32ValueForField:93 andValue:(nextStopDepth) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NextStopTime +- (BOOL)isNextStopTimeValid { + const fit::Field* field = [super getField:94]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getNextStopTime { + return ([super getFieldUINT32ValueForField:94 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNextStopTime:(FITUInt32)nextStopTime { + [super setFieldUINT32ValueForField:94 andValue:(nextStopTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeToSurface +- (BOOL)isTimeToSurfaceValid { + const fit::Field* field = [super getField:95]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTimeToSurface { + return ([super getFieldUINT32ValueForField:95 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeToSurface:(FITUInt32)timeToSurface { + [super setFieldUINT32ValueForField:95 andValue:(timeToSurface) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NdlTime +- (BOOL)isNdlTimeValid { + const fit::Field* field = [super getField:96]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getNdlTime { + return ([super getFieldUINT32ValueForField:96 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNdlTime:(FITUInt32)ndlTime { + [super setFieldUINT32ValueForField:96 andValue:(ndlTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CnsLoad +- (BOOL)isCnsLoadValid { + const fit::Field* field = [super getField:97]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getCnsLoad { + return ([super getFieldUINT8ValueForField:97 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCnsLoad:(FITUInt8)cnsLoad { + [super setFieldUINT8ValueForField:97 andValue:(cnsLoad) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// N2Load +- (BOOL)isN2LoadValid { + const fit::Field* field = [super getField:98]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getN2Load { + return ([super getFieldUINT16ValueForField:98 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setN2Load:(FITUInt16)n2Load { + [super setFieldUINT16ValueForField:98 andValue:(n2Load) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Grit +- (BOOL)isGritValid { + const fit::Field* field = [super getField:114]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getGrit { + return ([super getFieldFLOAT32ValueForField:114 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGrit:(FITFloat32)grit { + [super setFieldFLOAT32ValueForField:114 andValue:(grit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Flow +- (BOOL)isFlowValid { + const fit::Field* field = [super getField:115]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFlow { + return ([super getFieldFLOAT32ValueForField:115 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFlow:(FITFloat32)flow { + [super setFieldFLOAT32ValueForField:115 andValue:(flow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EbikeTravelRange +- (BOOL)isEbikeTravelRangeValid { + const fit::Field* field = [super getField:117]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getEbikeTravelRange { + return ([super getFieldUINT16ValueForField:117 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEbikeTravelRange:(FITUInt16)ebikeTravelRange { + [super setFieldUINT16ValueForField:117 andValue:(ebikeTravelRange) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EbikeBatteryLevel +- (BOOL)isEbikeBatteryLevelValid { + const fit::Field* field = [super getField:118]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEbikeBatteryLevel { + return ([super getFieldUINT8ValueForField:118 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEbikeBatteryLevel:(FITUInt8)ebikeBatteryLevel { + [super setFieldUINT8ValueForField:118 andValue:(ebikeBatteryLevel) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EbikeAssistMode +- (BOOL)isEbikeAssistModeValid { + const fit::Field* field = [super getField:119]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEbikeAssistMode { + return ([super getFieldUINT8ValueForField:119 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEbikeAssistMode:(FITUInt8)ebikeAssistMode { + [super setFieldUINT8ValueForField:119 andValue:(ebikeAssistMode) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EbikeAssistLevelPercent +- (BOOL)isEbikeAssistLevelPercentValid { + const fit::Field* field = [super getField:120]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEbikeAssistLevelPercent { + return ([super getFieldUINT8ValueForField:120 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEbikeAssistLevelPercent:(FITUInt8)ebikeAssistLevelPercent { + [super setFieldUINT8ValueForField:120 andValue:(ebikeAssistLevelPercent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CoreTemperature +- (BOOL)isCoreTemperatureValid { + const fit::Field* field = [super getField:139]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCoreTemperature { + return ([super getFieldFLOAT32ValueForField:139 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCoreTemperature:(FITFloat32)coreTemperature { + [super setFieldFLOAT32ValueForField:139 andValue:(coreTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITScheduleMesg.mm b/Sources/ObjcFIT/FITScheduleMesg.mm new file mode 100644 index 0000000..6112f8c --- /dev/null +++ b/Sources/ObjcFIT/FITScheduleMesg.mm @@ -0,0 +1,201 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITScheduleMesg.h" + +@implementation FITScheduleMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SCHEDULE]; + + return self; +} + +// Manufacturer +- (BOOL)isManufacturerValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITManufacturer)getManufacturer { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setManufacturer:(FITManufacturer)manufacturer { + [super setFieldUINT16ValueForField:0 andValue:(manufacturer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Product +- (BOOL)isProductValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getProduct { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setProduct:(FITUInt16)product { + [super setFieldUINT16ValueForField:1 andValue:(product) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Product - Sub Fields +// FaveroProduct - Product Field - Sub Field +- (BOOL)isFaveroProductValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITScheduleMesgProductFieldFaveroProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITScheduleMesgProductFieldFaveroProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFaveroProduct)getFaveroProduct +{ + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FITScheduleMesgProductFieldFaveroProductSubField]); +} + +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct +{ + [super setFieldUINT16ValueForField:1 andValue:(faveroProduct) forIndex:0 andSubFieldIndex:FITScheduleMesgProductFieldFaveroProductSubField]; +} +// GarminProduct - Product Field - Sub Field +- (BOOL)isGarminProductValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITScheduleMesgProductFieldGarminProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITScheduleMesgProductFieldGarminProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGarminProduct)getGarminProduct +{ + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FITScheduleMesgProductFieldGarminProductSubField]); +} + +- (void)setGarminProduct:(FITGarminProduct)garminProduct +{ + [super setFieldUINT16ValueForField:1 andValue:(garminProduct) forIndex:0 andSubFieldIndex:FITScheduleMesgProductFieldGarminProductSubField]; +} + +// SerialNumber +- (BOOL)isSerialNumberValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32z)getSerialNumber { + return ([super getFieldUINT32ZValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSerialNumber:(FITUInt32z)serialNumber { + [super setFieldUINT32ZValueForField:2 andValue:(serialNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeCreated +- (BOOL)isTimeCreatedValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimeCreated { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeCreated:(FITDate *)timeCreated { + [super setFieldUINT32ValueForField:3 andValue:TimestampFromFITDate(timeCreated) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Completed +- (BOOL)isCompletedValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getCompleted { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCompleted:(FITBool)completed { + [super setFieldENUMValueForField:4 andValue:(completed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSchedule)getType { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITSchedule)type { + [super setFieldENUMValueForField:5 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ScheduledTime +- (BOOL)isScheduledTimeValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocalDateTime)getScheduledTime { + return ([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setScheduledTime:(FITLocalDateTime)scheduledTime { + [super setFieldUINT32ValueForField:6 andValue:(scheduledTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSdmProfileMesg.mm b/Sources/ObjcFIT/FITSdmProfileMesg.mm new file mode 100644 index 0000000..ab8b553 --- /dev/null +++ b/Sources/ObjcFIT/FITSdmProfileMesg.mm @@ -0,0 +1,170 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITSdmProfileMesg.h" + +@implementation FITSdmProfileMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SDM_PROFILE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getEnabled { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITBool)enabled { + [super setFieldENUMValueForField:0 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SdmAntId +- (BOOL)isSdmAntIdValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16z)getSdmAntId { + return ([super getFieldUINT16ZValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSdmAntId:(FITUInt16z)sdmAntId { + [super setFieldUINT16ZValueForField:1 andValue:(sdmAntId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SdmCalFactor +- (BOOL)isSdmCalFactorValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSdmCalFactor { + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSdmCalFactor:(FITFloat32)sdmCalFactor { + [super setFieldFLOAT32ValueForField:2 andValue:(sdmCalFactor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Odometer +- (BOOL)isOdometerValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getOdometer { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOdometer:(FITFloat32)odometer { + [super setFieldFLOAT32ValueForField:3 andValue:(odometer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SpeedSource +- (BOOL)isSpeedSourceValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getSpeedSource { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSpeedSource:(FITBool)speedSource { + [super setFieldENUMValueForField:4 andValue:(speedSource) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SdmAntIdTransType +- (BOOL)isSdmAntIdTransTypeValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8z)getSdmAntIdTransType { + return ([super getFieldUINT8ZValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSdmAntIdTransType:(FITUInt8z)sdmAntIdTransType { + [super setFieldUINT8ZValueForField:5 andValue:(sdmAntIdTransType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OdometerRollover +- (BOOL)isOdometerRolloverValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getOdometerRollover { + return ([super getFieldUINT8ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOdometerRollover:(FITUInt8)odometerRollover { + [super setFieldUINT8ValueForField:7 andValue:(odometerRollover) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSegmentFileMesg.mm b/Sources/ObjcFIT/FITSegmentFileMesg.mm new file mode 100644 index 0000000..cd673c2 --- /dev/null +++ b/Sources/ObjcFIT/FITSegmentFileMesg.mm @@ -0,0 +1,205 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSegmentFileMesg.h" + +@implementation FITSegmentFileMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SEGMENT_FILE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FileUuid +- (BOOL)isFileUuidValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getFileUuid { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFileUuid:(NSString *)fileUuid { + [super setFieldSTRINGValueForField:1 andValue:(fileUuid) forIndex:0]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getEnabled { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITBool)enabled { + [super setFieldENUMValueForField:3 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UserProfilePrimaryKey +- (BOOL)isUserProfilePrimaryKeyValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getUserProfilePrimaryKey { + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUserProfilePrimaryKey:(FITUInt32)userProfilePrimaryKey { + [super setFieldUINT32ValueForField:4 andValue:(userProfilePrimaryKey) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeaderType +- (uint8_t)numLeaderTypeValues { + return [super getFieldNumValuesForField:7 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLeaderTypeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSegmentLeaderboardType)getLeaderTypeforIndex:(uint8_t)index { + return ([super getFieldENUMValueForField:7 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeaderType:(FITSegmentLeaderboardType)leaderType forIndex:(uint8_t)index { + [super setFieldENUMValueForField:7 andValue:(leaderType) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeaderGroupPrimaryKey +- (uint8_t)numLeaderGroupPrimaryKeyValues { + return [super getFieldNumValuesForField:8 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLeaderGroupPrimaryKeyValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getLeaderGroupPrimaryKeyforIndex:(uint8_t)index { + return ([super getFieldUINT32ValueForField:8 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeaderGroupPrimaryKey:(FITUInt32)leaderGroupPrimaryKey forIndex:(uint8_t)index { + [super setFieldUINT32ValueForField:8 andValue:(leaderGroupPrimaryKey) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeaderActivityId +- (uint8_t)numLeaderActivityIdValues { + return [super getFieldNumValuesForField:9 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLeaderActivityIdValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getLeaderActivityIdforIndex:(uint8_t)index { + return ([super getFieldUINT32ValueForField:9 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeaderActivityId:(FITUInt32)leaderActivityId forIndex:(uint8_t)index { + [super setFieldUINT32ValueForField:9 andValue:(leaderActivityId) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeaderActivityIdString +- (uint8_t)numLeaderActivityIdStringValues { + return [super getFieldNumValuesForField:10 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLeaderActivityIdStringValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getLeaderActivityIdStringforIndex:(uint8_t)index { + return ([super getFieldSTRINGValueForField:10 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeaderActivityIdString:(NSString *)leaderActivityIdString forIndex:(uint8_t)index { + [super setFieldSTRINGValueForField:10 andValue:(leaderActivityIdString) forIndex:index]; +} + +// DefaultRaceLeader +- (BOOL)isDefaultRaceLeaderValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDefaultRaceLeader { + return ([super getFieldUINT8ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDefaultRaceLeader:(FITUInt8)defaultRaceLeader { + [super setFieldUINT8ValueForField:11 andValue:(defaultRaceLeader) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSegmentIdMesg.mm b/Sources/ObjcFIT/FITSegmentIdMesg.mm new file mode 100644 index 0000000..0935b6c --- /dev/null +++ b/Sources/ObjcFIT/FITSegmentIdMesg.mm @@ -0,0 +1,189 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSegmentIdMesg.h" + +@implementation FITSegmentIdMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SEGMENT_ID]; + + return self; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:0 andValue:(name) forIndex:0]; +} + +// Uuid +- (BOOL)isUuidValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getUuid { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUuid:(NSString *)uuid { + [super setFieldSTRINGValueForField:1 andValue:(uuid) forIndex:0]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:2 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Enabled +- (BOOL)isEnabledValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITBool)getEnabled { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnabled:(FITBool)enabled { + [super setFieldENUMValueForField:3 andValue:(enabled) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UserProfilePrimaryKey +- (BOOL)isUserProfilePrimaryKeyValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getUserProfilePrimaryKey { + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUserProfilePrimaryKey:(FITUInt32)userProfilePrimaryKey { + [super setFieldUINT32ValueForField:4 andValue:(userProfilePrimaryKey) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeviceId +- (BOOL)isDeviceIdValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDeviceId { + return ([super getFieldUINT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeviceId:(FITUInt32)deviceId { + [super setFieldUINT32ValueForField:5 andValue:(deviceId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DefaultRaceLeader +- (BOOL)isDefaultRaceLeaderValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDefaultRaceLeader { + return ([super getFieldUINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDefaultRaceLeader:(FITUInt8)defaultRaceLeader { + [super setFieldUINT8ValueForField:6 andValue:(defaultRaceLeader) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DeleteStatus +- (BOOL)isDeleteStatusValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSegmentDeleteStatus)getDeleteStatus { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDeleteStatus:(FITSegmentDeleteStatus)deleteStatus { + [super setFieldENUMValueForField:7 andValue:(deleteStatus) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SelectionType +- (BOOL)isSelectionTypeValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSegmentSelectionType)getSelectionType { + return ([super getFieldENUMValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSelectionType:(FITSegmentSelectionType)selectionType { + [super setFieldENUMValueForField:8 andValue:(selectionType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSegmentLapMesg.mm b/Sources/ObjcFIT/FITSegmentLapMesg.mm new file mode 100644 index 0000000..eb90701 --- /dev/null +++ b/Sources/ObjcFIT/FITSegmentLapMesg.mm @@ -0,0 +1,1756 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSegmentLapMesg.h" + +@implementation FITSegmentLapMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SEGMENT_LAP]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Event +- (BOOL)isEventValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEvent)getEvent { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEvent:(FITEvent)event { + [super setFieldENUMValueForField:0 andValue:(event) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventType +- (BOOL)isEventTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEventType)getEventType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventType:(FITEventType)eventType { + [super setFieldENUMValueForField:1 andValue:(eventType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTime +- (BOOL)isStartTimeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTime:(FITDate *)startTime { + [super setFieldUINT32ValueForField:2 andValue:TimestampFromFITDate(startTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartPositionLat +- (BOOL)isStartPositionLatValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getStartPositionLat { + return ([super getFieldSINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartPositionLat:(FITSInt32)startPositionLat { + [super setFieldSINT32ValueForField:3 andValue:(startPositionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartPositionLong +- (BOOL)isStartPositionLongValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getStartPositionLong { + return ([super getFieldSINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartPositionLong:(FITSInt32)startPositionLong { + [super setFieldSINT32ValueForField:4 andValue:(startPositionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndPositionLat +- (BOOL)isEndPositionLatValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getEndPositionLat { + return ([super getFieldSINT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndPositionLat:(FITSInt32)endPositionLat { + [super setFieldSINT32ValueForField:5 andValue:(endPositionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndPositionLong +- (BOOL)isEndPositionLongValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getEndPositionLong { + return ([super getFieldSINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndPositionLong:(FITSInt32)endPositionLong { + [super setFieldSINT32ValueForField:6 andValue:(endPositionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalElapsedTime { + return ([super getFieldFLOAT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime { + [super setFieldFLOAT32ValueForField:7 andValue:(totalElapsedTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalTimerTime { + return ([super getFieldFLOAT32ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime { + [super setFieldFLOAT32ValueForField:8 andValue:(totalTimerTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalDistance +- (BOOL)isTotalDistanceValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalDistance { + return ([super getFieldFLOAT32ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalDistance:(FITFloat32)totalDistance { + [super setFieldFLOAT32ValueForField:9 andValue:(totalDistance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalCycles +- (BOOL)isTotalCyclesValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalCycles { + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCycles:(FITUInt32)totalCycles { + [super setFieldUINT32ValueForField:10 andValue:(totalCycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// TotalCycles - Sub Fields +// TotalStrokes - TotalCycles Field - Sub Field +- (BOOL)isTotalStrokesValid +{ + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:10 supportSubField:(FITUInt16)FITSegmentLapMesgTotalCyclesFieldTotalStrokesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITSegmentLapMesgTotalCyclesFieldTotalStrokesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalStrokes +{ + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FITSegmentLapMesgTotalCyclesFieldTotalStrokesSubField]); +} + +- (void)setTotalStrokes:(FITUInt32)totalStrokes +{ + [super setFieldUINT32ValueForField:10 andValue:(totalStrokes) forIndex:0 andSubFieldIndex:FITSegmentLapMesgTotalCyclesFieldTotalStrokesSubField]; +} + +// TotalCalories +- (BOOL)isTotalCaloriesValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalCalories { + return ([super getFieldUINT16ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCalories:(FITUInt16)totalCalories { + [super setFieldUINT16ValueForField:11 andValue:(totalCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFatCalories +- (BOOL)isTotalFatCaloriesValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalFatCalories { + return ([super getFieldUINT16ValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFatCalories:(FITUInt16)totalFatCalories { + [super setFieldUINT16ValueForField:12 andValue:(totalFatCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgSpeed +- (BOOL)isAvgSpeedValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgSpeed { + return ([super getFieldFLOAT32ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgSpeed:(FITFloat32)avgSpeed { + [super setFieldFLOAT32ValueForField:13 andValue:(avgSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxSpeed +- (BOOL)isMaxSpeedValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxSpeed { + return ([super getFieldFLOAT32ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxSpeed:(FITFloat32)maxSpeed { + [super setFieldFLOAT32ValueForField:14 andValue:(maxSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgHeartRate +- (BOOL)isAvgHeartRateValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgHeartRate { + return ([super getFieldUINT8ValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgHeartRate:(FITUInt8)avgHeartRate { + [super setFieldUINT8ValueForField:15 andValue:(avgHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxHeartRate +- (BOOL)isMaxHeartRateValid { + const fit::Field* field = [super getField:16]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxHeartRate { + return ([super getFieldUINT8ValueForField:16 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate { + [super setFieldUINT8ValueForField:16 andValue:(maxHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCadence +- (BOOL)isAvgCadenceValid { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgCadence { + return ([super getFieldUINT8ValueForField:17 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCadence:(FITUInt8)avgCadence { + [super setFieldUINT8ValueForField:17 andValue:(avgCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxCadence +- (BOOL)isMaxCadenceValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxCadence { + return ([super getFieldUINT8ValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCadence:(FITUInt8)maxCadence { + [super setFieldUINT8ValueForField:18 andValue:(maxCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPower +- (BOOL)isAvgPowerValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgPower { + return ([super getFieldUINT16ValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPower:(FITUInt16)avgPower { + [super setFieldUINT16ValueForField:19 andValue:(avgPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPower +- (BOOL)isMaxPowerValid { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPower { + return ([super getFieldUINT16ValueForField:20 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPower:(FITUInt16)maxPower { + [super setFieldUINT16ValueForField:20 andValue:(maxPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalAscent +- (BOOL)isTotalAscentValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalAscent { + return ([super getFieldUINT16ValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalAscent:(FITUInt16)totalAscent { + [super setFieldUINT16ValueForField:21 andValue:(totalAscent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalDescent +- (BOOL)isTotalDescentValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalDescent { + return ([super getFieldUINT16ValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalDescent:(FITUInt16)totalDescent { + [super setFieldUINT16ValueForField:22 andValue:(totalDescent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:23 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:23 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventGroup +- (BOOL)isEventGroupValid { + const fit::Field* field = [super getField:24]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEventGroup { + return ([super getFieldUINT8ValueForField:24 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventGroup:(FITUInt8)eventGroup { + [super setFieldUINT8ValueForField:24 andValue:(eventGroup) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NecLat +- (BOOL)isNecLatValid { + const fit::Field* field = [super getField:25]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getNecLat { + return ([super getFieldSINT32ValueForField:25 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNecLat:(FITSInt32)necLat { + [super setFieldSINT32ValueForField:25 andValue:(necLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NecLong +- (BOOL)isNecLongValid { + const fit::Field* field = [super getField:26]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getNecLong { + return ([super getFieldSINT32ValueForField:26 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNecLong:(FITSInt32)necLong { + [super setFieldSINT32ValueForField:26 andValue:(necLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SwcLat +- (BOOL)isSwcLatValid { + const fit::Field* field = [super getField:27]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getSwcLat { + return ([super getFieldSINT32ValueForField:27 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSwcLat:(FITSInt32)swcLat { + [super setFieldSINT32ValueForField:27 andValue:(swcLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SwcLong +- (BOOL)isSwcLongValid { + const fit::Field* field = [super getField:28]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getSwcLong { + return ([super getFieldSINT32ValueForField:28 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSwcLong:(FITSInt32)swcLong { + [super setFieldSINT32ValueForField:28 andValue:(swcLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:29]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:29 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:29 andValue:(name) forIndex:0]; +} + +// NormalizedPower +- (BOOL)isNormalizedPowerValid { + const fit::Field* field = [super getField:30]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNormalizedPower { + return ([super getFieldUINT16ValueForField:30 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNormalizedPower:(FITUInt16)normalizedPower { + [super setFieldUINT16ValueForField:30 andValue:(normalizedPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid { + const fit::Field* field = [super getField:31]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLeftRightBalance100)getLeftRightBalance { + return ([super getFieldUINT16ValueForField:31 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftRightBalance:(FITLeftRightBalance100)leftRightBalance { + [super setFieldUINT16ValueForField:31 andValue:(leftRightBalance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:32]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:32 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:32 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalWork +- (BOOL)isTotalWorkValid { + const fit::Field* field = [super getField:33]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalWork { + return ([super getFieldUINT32ValueForField:33 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalWork:(FITUInt32)totalWork { + [super setFieldUINT32ValueForField:33 andValue:(totalWork) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgAltitude +- (BOOL)isAvgAltitudeValid { + const fit::Field* field = [super getField:34]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgAltitude { + return ([super getFieldFLOAT32ValueForField:34 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgAltitude:(FITFloat32)avgAltitude { + [super setFieldFLOAT32ValueForField:34 andValue:(avgAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxAltitude +- (BOOL)isMaxAltitudeValid { + const fit::Field* field = [super getField:35]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxAltitude { + return ([super getFieldFLOAT32ValueForField:35 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxAltitude:(FITFloat32)maxAltitude { + [super setFieldFLOAT32ValueForField:35 andValue:(maxAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GpsAccuracy +- (BOOL)isGpsAccuracyValid { + const fit::Field* field = [super getField:36]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getGpsAccuracy { + return ([super getFieldUINT8ValueForField:36 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy { + [super setFieldUINT8ValueForField:36 andValue:(gpsAccuracy) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgGrade +- (BOOL)isAvgGradeValid { + const fit::Field* field = [super getField:37]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgGrade { + return ([super getFieldFLOAT32ValueForField:37 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgGrade:(FITFloat32)avgGrade { + [super setFieldFLOAT32ValueForField:37 andValue:(avgGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPosGrade +- (BOOL)isAvgPosGradeValid { + const fit::Field* field = [super getField:38]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgPosGrade { + return ([super getFieldFLOAT32ValueForField:38 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPosGrade:(FITFloat32)avgPosGrade { + [super setFieldFLOAT32ValueForField:38 andValue:(avgPosGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgNegGrade +- (BOOL)isAvgNegGradeValid { + const fit::Field* field = [super getField:39]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgNegGrade { + return ([super getFieldFLOAT32ValueForField:39 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgNegGrade:(FITFloat32)avgNegGrade { + [super setFieldFLOAT32ValueForField:39 andValue:(avgNegGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPosGrade +- (BOOL)isMaxPosGradeValid { + const fit::Field* field = [super getField:40]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxPosGrade { + return ([super getFieldFLOAT32ValueForField:40 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPosGrade:(FITFloat32)maxPosGrade { + [super setFieldFLOAT32ValueForField:40 andValue:(maxPosGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxNegGrade +- (BOOL)isMaxNegGradeValid { + const fit::Field* field = [super getField:41]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxNegGrade { + return ([super getFieldFLOAT32ValueForField:41 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxNegGrade:(FITFloat32)maxNegGrade { + [super setFieldFLOAT32ValueForField:41 andValue:(maxNegGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgTemperature +- (BOOL)isAvgTemperatureValid { + const fit::Field* field = [super getField:42]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgTemperature { + return ([super getFieldSINT8ValueForField:42 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgTemperature:(FITSInt8)avgTemperature { + [super setFieldSINT8ValueForField:42 andValue:(avgTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxTemperature +- (BOOL)isMaxTemperatureValid { + const fit::Field* field = [super getField:43]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getMaxTemperature { + return ([super getFieldSINT8ValueForField:43 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxTemperature:(FITSInt8)maxTemperature { + [super setFieldSINT8ValueForField:43 andValue:(maxTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalMovingTime +- (BOOL)isTotalMovingTimeValid { + const fit::Field* field = [super getField:44]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalMovingTime { + return ([super getFieldFLOAT32ValueForField:44 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalMovingTime:(FITFloat32)totalMovingTime { + [super setFieldFLOAT32ValueForField:44 andValue:(totalMovingTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPosVerticalSpeed +- (BOOL)isAvgPosVerticalSpeedValid { + const fit::Field* field = [super getField:45]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgPosVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:45 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPosVerticalSpeed:(FITFloat32)avgPosVerticalSpeed { + [super setFieldFLOAT32ValueForField:45 andValue:(avgPosVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgNegVerticalSpeed +- (BOOL)isAvgNegVerticalSpeedValid { + const fit::Field* field = [super getField:46]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgNegVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:46 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgNegVerticalSpeed:(FITFloat32)avgNegVerticalSpeed { + [super setFieldFLOAT32ValueForField:46 andValue:(avgNegVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPosVerticalSpeed +- (BOOL)isMaxPosVerticalSpeedValid { + const fit::Field* field = [super getField:47]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxPosVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:47 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPosVerticalSpeed:(FITFloat32)maxPosVerticalSpeed { + [super setFieldFLOAT32ValueForField:47 andValue:(maxPosVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxNegVerticalSpeed +- (BOOL)isMaxNegVerticalSpeedValid { + const fit::Field* field = [super getField:48]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxNegVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:48 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxNegVerticalSpeed:(FITFloat32)maxNegVerticalSpeed { + [super setFieldFLOAT32ValueForField:48 andValue:(maxNegVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInHrZone +- (uint8_t)numTimeInHrZoneValues { + return [super getFieldNumValuesForField:49 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInHrZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:49]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInHrZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:49 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInHrZone:(FITFloat32)timeInHrZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:49 andValue:(timeInHrZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInSpeedZone +- (uint8_t)numTimeInSpeedZoneValues { + return [super getFieldNumValuesForField:50 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInSpeedZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:50]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInSpeedZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:50 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInSpeedZone:(FITFloat32)timeInSpeedZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:50 andValue:(timeInSpeedZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInCadenceZone +- (uint8_t)numTimeInCadenceZoneValues { + return [super getFieldNumValuesForField:51 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInCadenceZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:51]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInCadenceZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:51 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInCadenceZone:(FITFloat32)timeInCadenceZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:51 andValue:(timeInCadenceZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInPowerZone +- (uint8_t)numTimeInPowerZoneValues { + return [super getFieldNumValuesForField:52 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInPowerZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:52]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInPowerZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:52 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInPowerZone:(FITFloat32)timeInPowerZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:52 andValue:(timeInPowerZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RepetitionNum +- (BOOL)isRepetitionNumValid { + const fit::Field* field = [super getField:53]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getRepetitionNum { + return ([super getFieldUINT16ValueForField:53 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRepetitionNum:(FITUInt16)repetitionNum { + [super setFieldUINT16ValueForField:53 andValue:(repetitionNum) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinAltitude +- (BOOL)isMinAltitudeValid { + const fit::Field* field = [super getField:54]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinAltitude { + return ([super getFieldFLOAT32ValueForField:54 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinAltitude:(FITFloat32)minAltitude { + [super setFieldFLOAT32ValueForField:54 andValue:(minAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinHeartRate +- (BOOL)isMinHeartRateValid { + const fit::Field* field = [super getField:55]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMinHeartRate { + return ([super getFieldUINT8ValueForField:55 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinHeartRate:(FITUInt8)minHeartRate { + [super setFieldUINT8ValueForField:55 andValue:(minHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActiveTime +- (BOOL)isActiveTimeValid { + const fit::Field* field = [super getField:56]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getActiveTime { + return ([super getFieldFLOAT32ValueForField:56 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActiveTime:(FITFloat32)activeTime { + [super setFieldFLOAT32ValueForField:56 andValue:(activeTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WktStepIndex +- (BOOL)isWktStepIndexValid { + const fit::Field* field = [super getField:57]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getWktStepIndex { + return ([super getFieldUINT16ValueForField:57 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWktStepIndex:(FITMessageIndex)wktStepIndex { + [super setFieldUINT16ValueForField:57 andValue:(wktStepIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SportEvent +- (BOOL)isSportEventValid { + const fit::Field* field = [super getField:58]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSportEvent)getSportEvent { + return ([super getFieldENUMValueForField:58 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSportEvent:(FITSportEvent)sportEvent { + [super setFieldENUMValueForField:58 andValue:(sportEvent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftTorqueEffectiveness +- (BOOL)isAvgLeftTorqueEffectivenessValid { + const fit::Field* field = [super getField:59]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:59 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftTorqueEffectiveness:(FITFloat32)avgLeftTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:59 andValue:(avgLeftTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightTorqueEffectiveness +- (BOOL)isAvgRightTorqueEffectivenessValid { + const fit::Field* field = [super getField:60]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:60 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightTorqueEffectiveness:(FITFloat32)avgRightTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:60 andValue:(avgRightTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPedalSmoothness +- (BOOL)isAvgLeftPedalSmoothnessValid { + const fit::Field* field = [super getField:61]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:61 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPedalSmoothness:(FITFloat32)avgLeftPedalSmoothness { + [super setFieldFLOAT32ValueForField:61 andValue:(avgLeftPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPedalSmoothness +- (BOOL)isAvgRightPedalSmoothnessValid { + const fit::Field* field = [super getField:62]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:62 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPedalSmoothness:(FITFloat32)avgRightPedalSmoothness { + [super setFieldFLOAT32ValueForField:62 andValue:(avgRightPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCombinedPedalSmoothness +- (BOOL)isAvgCombinedPedalSmoothnessValid { + const fit::Field* field = [super getField:63]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgCombinedPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:63 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCombinedPedalSmoothness:(FITFloat32)avgCombinedPedalSmoothness { + [super setFieldFLOAT32ValueForField:63 andValue:(avgCombinedPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Status +- (BOOL)isStatusValid { + const fit::Field* field = [super getField:64]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSegmentLapStatus)getStatus { + return ([super getFieldENUMValueForField:64 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStatus:(FITSegmentLapStatus)status { + [super setFieldENUMValueForField:64 andValue:(status) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Uuid +- (BOOL)isUuidValid { + const fit::Field* field = [super getField:65]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getUuid { + return ([super getFieldSTRINGValueForField:65 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUuid:(NSString *)uuid { + [super setFieldSTRINGValueForField:65 andValue:(uuid) forIndex:0]; +} + +// AvgFractionalCadence +- (BOOL)isAvgFractionalCadenceValid { + const fit::Field* field = [super getField:66]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgFractionalCadence { + return ([super getFieldFLOAT32ValueForField:66 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgFractionalCadence:(FITFloat32)avgFractionalCadence { + [super setFieldFLOAT32ValueForField:66 andValue:(avgFractionalCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxFractionalCadence +- (BOOL)isMaxFractionalCadenceValid { + const fit::Field* field = [super getField:67]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxFractionalCadence { + return ([super getFieldFLOAT32ValueForField:67 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxFractionalCadence:(FITFloat32)maxFractionalCadence { + [super setFieldFLOAT32ValueForField:67 andValue:(maxFractionalCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalCycles +- (BOOL)isTotalFractionalCyclesValid { + const fit::Field* field = [super getField:68]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalCycles { + return ([super getFieldFLOAT32ValueForField:68 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalCycles:(FITFloat32)totalFractionalCycles { + [super setFieldFLOAT32ValueForField:68 andValue:(totalFractionalCycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FrontGearShiftCount +- (BOOL)isFrontGearShiftCountValid { + const fit::Field* field = [super getField:69]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getFrontGearShiftCount { + return ([super getFieldUINT16ValueForField:69 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFrontGearShiftCount:(FITUInt16)frontGearShiftCount { + [super setFieldUINT16ValueForField:69 andValue:(frontGearShiftCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RearGearShiftCount +- (BOOL)isRearGearShiftCountValid { + const fit::Field* field = [super getField:70]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getRearGearShiftCount { + return ([super getFieldUINT16ValueForField:70 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRearGearShiftCount:(FITUInt16)rearGearShiftCount { + [super setFieldUINT16ValueForField:70 andValue:(rearGearShiftCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeStanding +- (BOOL)isTimeStandingValid { + const fit::Field* field = [super getField:71]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeStanding { + return ([super getFieldFLOAT32ValueForField:71 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeStanding:(FITFloat32)timeStanding { + [super setFieldFLOAT32ValueForField:71 andValue:(timeStanding) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StandCount +- (BOOL)isStandCountValid { + const fit::Field* field = [super getField:72]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStandCount { + return ([super getFieldUINT16ValueForField:72 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStandCount:(FITUInt16)standCount { + [super setFieldUINT16ValueForField:72 andValue:(standCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPco +- (BOOL)isAvgLeftPcoValid { + const fit::Field* field = [super getField:73]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgLeftPco { + return ([super getFieldSINT8ValueForField:73 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPco:(FITSInt8)avgLeftPco { + [super setFieldSINT8ValueForField:73 andValue:(avgLeftPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPco +- (BOOL)isAvgRightPcoValid { + const fit::Field* field = [super getField:74]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgRightPco { + return ([super getFieldSINT8ValueForField:74 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPco:(FITSInt8)avgRightPco { + [super setFieldSINT8ValueForField:74 andValue:(avgRightPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPowerPhase +- (uint8_t)numAvgLeftPowerPhaseValues { + return [super getFieldNumValuesForField:75 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgLeftPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:75]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:75 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPowerPhase:(FITFloat32)avgLeftPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:75 andValue:(avgLeftPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPowerPhasePeak +- (uint8_t)numAvgLeftPowerPhasePeakValues { + return [super getFieldNumValuesForField:76 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgLeftPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:76]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:76 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPowerPhasePeak:(FITFloat32)avgLeftPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:76 andValue:(avgLeftPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPowerPhase +- (uint8_t)numAvgRightPowerPhaseValues { + return [super getFieldNumValuesForField:77 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgRightPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:77]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:77 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPowerPhase:(FITFloat32)avgRightPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:77 andValue:(avgRightPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPowerPhasePeak +- (uint8_t)numAvgRightPowerPhasePeakValues { + return [super getFieldNumValuesForField:78 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgRightPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:78]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:78 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPowerPhasePeak:(FITFloat32)avgRightPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:78 andValue:(avgRightPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPowerPosition +- (uint8_t)numAvgPowerPositionValues { + return [super getFieldNumValuesForField:79 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgPowerPositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:79]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgPowerPositionforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:79 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPowerPosition:(FITUInt16)avgPowerPosition forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:79 andValue:(avgPowerPosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPowerPosition +- (uint8_t)numMaxPowerPositionValues { + return [super getFieldNumValuesForField:80 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxPowerPositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:80]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPowerPositionforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:80 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPowerPosition:(FITUInt16)maxPowerPosition forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:80 andValue:(maxPowerPosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCadencePosition +- (uint8_t)numAvgCadencePositionValues { + return [super getFieldNumValuesForField:81 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgCadencePositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:81]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgCadencePositionforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:81 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCadencePosition:(FITUInt8)avgCadencePosition forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:81 andValue:(avgCadencePosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxCadencePosition +- (uint8_t)numMaxCadencePositionValues { + return [super getFieldNumValuesForField:82 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxCadencePositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:82]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxCadencePositionforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:82 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCadencePosition:(FITUInt8)maxCadencePosition forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:82 andValue:(maxCadencePosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Manufacturer +- (BOOL)isManufacturerValid { + const fit::Field* field = [super getField:83]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITManufacturer)getManufacturer { + return ([super getFieldUINT16ValueForField:83 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setManufacturer:(FITManufacturer)manufacturer { + [super setFieldUINT16ValueForField:83 andValue:(manufacturer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalGrit +- (BOOL)isTotalGritValid { + const fit::Field* field = [super getField:84]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalGrit { + return ([super getFieldFLOAT32ValueForField:84 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalGrit:(FITFloat32)totalGrit { + [super setFieldFLOAT32ValueForField:84 andValue:(totalGrit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFlow +- (BOOL)isTotalFlowValid { + const fit::Field* field = [super getField:85]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFlow { + return ([super getFieldFLOAT32ValueForField:85 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFlow:(FITFloat32)totalFlow { + [super setFieldFLOAT32ValueForField:85 andValue:(totalFlow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgGrit +- (BOOL)isAvgGritValid { + const fit::Field* field = [super getField:86]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgGrit { + return ([super getFieldFLOAT32ValueForField:86 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgGrit:(FITFloat32)avgGrit { + [super setFieldFLOAT32ValueForField:86 andValue:(avgGrit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgFlow +- (BOOL)isAvgFlowValid { + const fit::Field* field = [super getField:87]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgFlow { + return ([super getFieldFLOAT32ValueForField:87 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgFlow:(FITFloat32)avgFlow { + [super setFieldFLOAT32ValueForField:87 andValue:(avgFlow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalAscent +- (BOOL)isTotalFractionalAscentValid { + const fit::Field* field = [super getField:89]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalAscent { + return ([super getFieldFLOAT32ValueForField:89 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalAscent:(FITFloat32)totalFractionalAscent { + [super setFieldFLOAT32ValueForField:89 andValue:(totalFractionalAscent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalDescent +- (BOOL)isTotalFractionalDescentValid { + const fit::Field* field = [super getField:90]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalDescent { + return ([super getFieldFLOAT32ValueForField:90 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalDescent:(FITFloat32)totalFractionalDescent { + [super setFieldFLOAT32ValueForField:90 andValue:(totalFractionalDescent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSegmentLeaderboardEntryMesg.mm b/Sources/ObjcFIT/FITSegmentLeaderboardEntryMesg.mm new file mode 100644 index 0000000..0c2a963 --- /dev/null +++ b/Sources/ObjcFIT/FITSegmentLeaderboardEntryMesg.mm @@ -0,0 +1,153 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSegmentLeaderboardEntryMesg.h" + +@implementation FITSegmentLeaderboardEntryMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SEGMENT_LEADERBOARD_ENTRY]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:0 andValue:(name) forIndex:0]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSegmentLeaderboardType)getType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITSegmentLeaderboardType)type { + [super setFieldENUMValueForField:1 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GroupPrimaryKey +- (BOOL)isGroupPrimaryKeyValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getGroupPrimaryKey { + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGroupPrimaryKey:(FITUInt32)groupPrimaryKey { + [super setFieldUINT32ValueForField:2 andValue:(groupPrimaryKey) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityId +- (BOOL)isActivityIdValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getActivityId { + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityId:(FITUInt32)activityId { + [super setFieldUINT32ValueForField:3 andValue:(activityId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SegmentTime +- (BOOL)isSegmentTimeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSegmentTime { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSegmentTime:(FITFloat32)segmentTime { + [super setFieldFLOAT32ValueForField:4 andValue:(segmentTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityIdString +- (BOOL)isActivityIdStringValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getActivityIdString { + return ([super getFieldSTRINGValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityIdString:(NSString *)activityIdString { + [super setFieldSTRINGValueForField:5 andValue:(activityIdString) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITSegmentPointMesg.mm b/Sources/ObjcFIT/FITSegmentPointMesg.mm new file mode 100644 index 0000000..3cc5ae5 --- /dev/null +++ b/Sources/ObjcFIT/FITSegmentPointMesg.mm @@ -0,0 +1,138 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITSegmentPointMesg.h" + +@implementation FITSegmentPointMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SEGMENT_POINT]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLat +- (BOOL)isPositionLatValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLat { + return ([super getFieldSINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLat:(FITSInt32)positionLat { + [super setFieldSINT32ValueForField:1 andValue:(positionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionLong +- (BOOL)isPositionLongValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getPositionLong { + return ([super getFieldSINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionLong:(FITSInt32)positionLong { + [super setFieldSINT32ValueForField:2 andValue:(positionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Distance +- (BOOL)isDistanceValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDistance { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistance:(FITFloat32)distance { + [super setFieldFLOAT32ValueForField:3 andValue:(distance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Altitude +- (BOOL)isAltitudeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAltitude { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAltitude:(FITFloat32)altitude { + [super setFieldFLOAT32ValueForField:4 andValue:(altitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeaderTime +- (uint8_t)numLeaderTimeValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isLeaderTimeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getLeaderTimeforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeaderTime:(FITFloat32)leaderTime forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:5 andValue:(leaderTime) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSessionMesg.mm b/Sources/ObjcFIT/FITSessionMesg.mm new file mode 100644 index 0000000..ebefb40 --- /dev/null +++ b/Sources/ObjcFIT/FITSessionMesg.mm @@ -0,0 +1,2564 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSessionMesg.h" + +@implementation FITSessionMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SESSION]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Event +- (BOOL)isEventValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEvent)getEvent { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEvent:(FITEvent)event { + [super setFieldENUMValueForField:0 andValue:(event) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventType +- (BOOL)isEventTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITEventType)getEventType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventType:(FITEventType)eventType { + [super setFieldENUMValueForField:1 andValue:(eventType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTime +- (BOOL)isStartTimeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTime:(FITDate *)startTime { + [super setFieldUINT32ValueForField:2 andValue:TimestampFromFITDate(startTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartPositionLat +- (BOOL)isStartPositionLatValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getStartPositionLat { + return ([super getFieldSINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartPositionLat:(FITSInt32)startPositionLat { + [super setFieldSINT32ValueForField:3 andValue:(startPositionLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartPositionLong +- (BOOL)isStartPositionLongValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getStartPositionLong { + return ([super getFieldSINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartPositionLong:(FITSInt32)startPositionLong { + [super setFieldSINT32ValueForField:4 andValue:(startPositionLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:5 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:6 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalElapsedTime { + return ([super getFieldFLOAT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime { + [super setFieldFLOAT32ValueForField:7 andValue:(totalElapsedTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalTimerTime { + return ([super getFieldFLOAT32ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime { + [super setFieldFLOAT32ValueForField:8 andValue:(totalTimerTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalDistance +- (BOOL)isTotalDistanceValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalDistance { + return ([super getFieldFLOAT32ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalDistance:(FITFloat32)totalDistance { + [super setFieldFLOAT32ValueForField:9 andValue:(totalDistance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalCycles +- (BOOL)isTotalCyclesValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalCycles { + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCycles:(FITUInt32)totalCycles { + [super setFieldUINT32ValueForField:10 andValue:(totalCycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// TotalCycles - Sub Fields +// TotalStrides - TotalCycles Field - Sub Field +- (BOOL)isTotalStridesValid +{ + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:10 supportSubField:(FITUInt16)FITSessionMesgTotalCyclesFieldTotalStridesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITSessionMesgTotalCyclesFieldTotalStridesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalStrides +{ + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FITSessionMesgTotalCyclesFieldTotalStridesSubField]); +} + +- (void)setTotalStrides:(FITUInt32)totalStrides +{ + [super setFieldUINT32ValueForField:10 andValue:(totalStrides) forIndex:0 andSubFieldIndex:FITSessionMesgTotalCyclesFieldTotalStridesSubField]; +} +// TotalStrokes - TotalCycles Field - Sub Field +- (BOOL)isTotalStrokesValid +{ + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:10 supportSubField:(FITUInt16)FITSessionMesgTotalCyclesFieldTotalStrokesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITSessionMesgTotalCyclesFieldTotalStrokesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalStrokes +{ + return ([super getFieldUINT32ValueForField:10 forIndex:0 andSubFieldIndex:FITSessionMesgTotalCyclesFieldTotalStrokesSubField]); +} + +- (void)setTotalStrokes:(FITUInt32)totalStrokes +{ + [super setFieldUINT32ValueForField:10 andValue:(totalStrokes) forIndex:0 andSubFieldIndex:FITSessionMesgTotalCyclesFieldTotalStrokesSubField]; +} + +// TotalCalories +- (BOOL)isTotalCaloriesValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalCalories { + return ([super getFieldUINT16ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalCalories:(FITUInt16)totalCalories { + [super setFieldUINT16ValueForField:11 andValue:(totalCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFatCalories +- (BOOL)isTotalFatCaloriesValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalFatCalories { + return ([super getFieldUINT16ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFatCalories:(FITUInt16)totalFatCalories { + [super setFieldUINT16ValueForField:13 andValue:(totalFatCalories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgSpeed +- (BOOL)isAvgSpeedValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgSpeed { + return ([super getFieldFLOAT32ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgSpeed:(FITFloat32)avgSpeed { + [super setFieldFLOAT32ValueForField:14 andValue:(avgSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxSpeed +- (BOOL)isMaxSpeedValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxSpeed { + return ([super getFieldFLOAT32ValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxSpeed:(FITFloat32)maxSpeed { + [super setFieldFLOAT32ValueForField:15 andValue:(maxSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgHeartRate +- (BOOL)isAvgHeartRateValid { + const fit::Field* field = [super getField:16]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgHeartRate { + return ([super getFieldUINT8ValueForField:16 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgHeartRate:(FITUInt8)avgHeartRate { + [super setFieldUINT8ValueForField:16 andValue:(avgHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxHeartRate +- (BOOL)isMaxHeartRateValid { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxHeartRate { + return ([super getFieldUINT8ValueForField:17 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate { + [super setFieldUINT8ValueForField:17 andValue:(maxHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCadence +- (BOOL)isAvgCadenceValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgCadence { + return ([super getFieldUINT8ValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCadence:(FITUInt8)avgCadence { + [super setFieldUINT8ValueForField:18 andValue:(avgCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// AvgCadence - Sub Fields +// AvgRunningCadence - AvgCadence Field - Sub Field +- (BOOL)isAvgRunningCadenceValid +{ + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:18 supportSubField:(FITUInt16)FITSessionMesgAvgCadenceFieldAvgRunningCadenceSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITSessionMesgAvgCadenceFieldAvgRunningCadenceSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgRunningCadence +{ + return ([super getFieldUINT8ValueForField:18 forIndex:0 andSubFieldIndex:FITSessionMesgAvgCadenceFieldAvgRunningCadenceSubField]); +} + +- (void)setAvgRunningCadence:(FITUInt8)avgRunningCadence +{ + [super setFieldUINT8ValueForField:18 andValue:(avgRunningCadence) forIndex:0 andSubFieldIndex:FITSessionMesgAvgCadenceFieldAvgRunningCadenceSubField]; +} + +// MaxCadence +- (BOOL)isMaxCadenceValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxCadence { + return ([super getFieldUINT8ValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCadence:(FITUInt8)maxCadence { + [super setFieldUINT8ValueForField:19 andValue:(maxCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// MaxCadence - Sub Fields +// MaxRunningCadence - MaxCadence Field - Sub Field +- (BOOL)isMaxRunningCadenceValid +{ + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:19 supportSubField:(FITUInt16)FITSessionMesgMaxCadenceFieldMaxRunningCadenceSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITSessionMesgMaxCadenceFieldMaxRunningCadenceSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxRunningCadence +{ + return ([super getFieldUINT8ValueForField:19 forIndex:0 andSubFieldIndex:FITSessionMesgMaxCadenceFieldMaxRunningCadenceSubField]); +} + +- (void)setMaxRunningCadence:(FITUInt8)maxRunningCadence +{ + [super setFieldUINT8ValueForField:19 andValue:(maxRunningCadence) forIndex:0 andSubFieldIndex:FITSessionMesgMaxCadenceFieldMaxRunningCadenceSubField]; +} + +// AvgPower +- (BOOL)isAvgPowerValid { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgPower { + return ([super getFieldUINT16ValueForField:20 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPower:(FITUInt16)avgPower { + [super setFieldUINT16ValueForField:20 andValue:(avgPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPower +- (BOOL)isMaxPowerValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPower { + return ([super getFieldUINT16ValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPower:(FITUInt16)maxPower { + [super setFieldUINT16ValueForField:21 andValue:(maxPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalAscent +- (BOOL)isTotalAscentValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalAscent { + return ([super getFieldUINT16ValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalAscent:(FITUInt16)totalAscent { + [super setFieldUINT16ValueForField:22 andValue:(totalAscent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalDescent +- (BOOL)isTotalDescentValid { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTotalDescent { + return ([super getFieldUINT16ValueForField:23 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalDescent:(FITUInt16)totalDescent { + [super setFieldUINT16ValueForField:23 andValue:(totalDescent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalTrainingEffect +- (BOOL)isTotalTrainingEffectValid { + const fit::Field* field = [super getField:24]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalTrainingEffect { + return ([super getFieldFLOAT32ValueForField:24 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalTrainingEffect:(FITFloat32)totalTrainingEffect { + [super setFieldFLOAT32ValueForField:24 andValue:(totalTrainingEffect) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FirstLapIndex +- (BOOL)isFirstLapIndexValid { + const fit::Field* field = [super getField:25]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getFirstLapIndex { + return ([super getFieldUINT16ValueForField:25 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFirstLapIndex:(FITUInt16)firstLapIndex { + [super setFieldUINT16ValueForField:25 andValue:(firstLapIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumLaps +- (BOOL)isNumLapsValid { + const fit::Field* field = [super getField:26]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumLaps { + return ([super getFieldUINT16ValueForField:26 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumLaps:(FITUInt16)numLaps { + [super setFieldUINT16ValueForField:26 andValue:(numLaps) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EventGroup +- (BOOL)isEventGroupValid { + const fit::Field* field = [super getField:27]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getEventGroup { + return ([super getFieldUINT8ValueForField:27 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEventGroup:(FITUInt8)eventGroup { + [super setFieldUINT8ValueForField:27 andValue:(eventGroup) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Trigger +- (BOOL)isTriggerValid { + const fit::Field* field = [super getField:28]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSessionTrigger)getTrigger { + return ([super getFieldENUMValueForField:28 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTrigger:(FITSessionTrigger)trigger { + [super setFieldENUMValueForField:28 andValue:(trigger) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NecLat +- (BOOL)isNecLatValid { + const fit::Field* field = [super getField:29]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getNecLat { + return ([super getFieldSINT32ValueForField:29 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNecLat:(FITSInt32)necLat { + [super setFieldSINT32ValueForField:29 andValue:(necLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NecLong +- (BOOL)isNecLongValid { + const fit::Field* field = [super getField:30]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getNecLong { + return ([super getFieldSINT32ValueForField:30 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNecLong:(FITSInt32)necLong { + [super setFieldSINT32ValueForField:30 andValue:(necLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SwcLat +- (BOOL)isSwcLatValid { + const fit::Field* field = [super getField:31]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getSwcLat { + return ([super getFieldSINT32ValueForField:31 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSwcLat:(FITSInt32)swcLat { + [super setFieldSINT32ValueForField:31 andValue:(swcLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SwcLong +- (BOOL)isSwcLongValid { + const fit::Field* field = [super getField:32]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getSwcLong { + return ([super getFieldSINT32ValueForField:32 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSwcLong:(FITSInt32)swcLong { + [super setFieldSINT32ValueForField:32 andValue:(swcLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumLengths +- (BOOL)isNumLengthsValid { + const fit::Field* field = [super getField:33]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumLengths { + return ([super getFieldUINT16ValueForField:33 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumLengths:(FITUInt16)numLengths { + [super setFieldUINT16ValueForField:33 andValue:(numLengths) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NormalizedPower +- (BOOL)isNormalizedPowerValid { + const fit::Field* field = [super getField:34]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNormalizedPower { + return ([super getFieldUINT16ValueForField:34 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNormalizedPower:(FITUInt16)normalizedPower { + [super setFieldUINT16ValueForField:34 andValue:(normalizedPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TrainingStressScore +- (BOOL)isTrainingStressScoreValid { + const fit::Field* field = [super getField:35]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTrainingStressScore { + return ([super getFieldFLOAT32ValueForField:35 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTrainingStressScore:(FITFloat32)trainingStressScore { + [super setFieldFLOAT32ValueForField:35 andValue:(trainingStressScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// IntensityFactor +- (BOOL)isIntensityFactorValid { + const fit::Field* field = [super getField:36]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getIntensityFactor { + return ([super getFieldFLOAT32ValueForField:36 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setIntensityFactor:(FITFloat32)intensityFactor { + [super setFieldFLOAT32ValueForField:36 andValue:(intensityFactor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid { + const fit::Field* field = [super getField:37]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLeftRightBalance100)getLeftRightBalance { + return ([super getFieldUINT16ValueForField:37 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLeftRightBalance:(FITLeftRightBalance100)leftRightBalance { + [super setFieldUINT16ValueForField:37 andValue:(leftRightBalance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStrokeCount +- (BOOL)isAvgStrokeCountValid { + const fit::Field* field = [super getField:41]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStrokeCount { + return ([super getFieldFLOAT32ValueForField:41 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStrokeCount:(FITFloat32)avgStrokeCount { + [super setFieldFLOAT32ValueForField:41 andValue:(avgStrokeCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStrokeDistance +- (BOOL)isAvgStrokeDistanceValid { + const fit::Field* field = [super getField:42]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStrokeDistance { + return ([super getFieldFLOAT32ValueForField:42 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStrokeDistance:(FITFloat32)avgStrokeDistance { + [super setFieldFLOAT32ValueForField:42 andValue:(avgStrokeDistance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SwimStroke +- (BOOL)isSwimStrokeValid { + const fit::Field* field = [super getField:43]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSwimStroke)getSwimStroke { + return ([super getFieldENUMValueForField:43 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSwimStroke:(FITSwimStroke)swimStroke { + [super setFieldENUMValueForField:43 andValue:(swimStroke) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PoolLength +- (BOOL)isPoolLengthValid { + const fit::Field* field = [super getField:44]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPoolLength { + return ([super getFieldFLOAT32ValueForField:44 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPoolLength:(FITFloat32)poolLength { + [super setFieldFLOAT32ValueForField:44 andValue:(poolLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ThresholdPower +- (BOOL)isThresholdPowerValid { + const fit::Field* field = [super getField:45]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getThresholdPower { + return ([super getFieldUINT16ValueForField:45 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setThresholdPower:(FITUInt16)thresholdPower { + [super setFieldUINT16ValueForField:45 andValue:(thresholdPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PoolLengthUnit +- (BOOL)isPoolLengthUnitValid { + const fit::Field* field = [super getField:46]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getPoolLengthUnit { + return ([super getFieldENUMValueForField:46 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPoolLengthUnit:(FITDisplayMeasure)poolLengthUnit { + [super setFieldENUMValueForField:46 andValue:(poolLengthUnit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumActiveLengths +- (BOOL)isNumActiveLengthsValid { + const fit::Field* field = [super getField:47]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumActiveLengths { + return ([super getFieldUINT16ValueForField:47 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumActiveLengths:(FITUInt16)numActiveLengths { + [super setFieldUINT16ValueForField:47 andValue:(numActiveLengths) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalWork +- (BOOL)isTotalWorkValid { + const fit::Field* field = [super getField:48]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTotalWork { + return ([super getFieldUINT32ValueForField:48 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalWork:(FITUInt32)totalWork { + [super setFieldUINT32ValueForField:48 andValue:(totalWork) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgAltitude +- (BOOL)isAvgAltitudeValid { + const fit::Field* field = [super getField:49]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgAltitude { + return ([super getFieldFLOAT32ValueForField:49 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgAltitude:(FITFloat32)avgAltitude { + [super setFieldFLOAT32ValueForField:49 andValue:(avgAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxAltitude +- (BOOL)isMaxAltitudeValid { + const fit::Field* field = [super getField:50]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxAltitude { + return ([super getFieldFLOAT32ValueForField:50 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxAltitude:(FITFloat32)maxAltitude { + [super setFieldFLOAT32ValueForField:50 andValue:(maxAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GpsAccuracy +- (BOOL)isGpsAccuracyValid { + const fit::Field* field = [super getField:51]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getGpsAccuracy { + return ([super getFieldUINT8ValueForField:51 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy { + [super setFieldUINT8ValueForField:51 andValue:(gpsAccuracy) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgGrade +- (BOOL)isAvgGradeValid { + const fit::Field* field = [super getField:52]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgGrade { + return ([super getFieldFLOAT32ValueForField:52 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgGrade:(FITFloat32)avgGrade { + [super setFieldFLOAT32ValueForField:52 andValue:(avgGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPosGrade +- (BOOL)isAvgPosGradeValid { + const fit::Field* field = [super getField:53]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgPosGrade { + return ([super getFieldFLOAT32ValueForField:53 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPosGrade:(FITFloat32)avgPosGrade { + [super setFieldFLOAT32ValueForField:53 andValue:(avgPosGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgNegGrade +- (BOOL)isAvgNegGradeValid { + const fit::Field* field = [super getField:54]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgNegGrade { + return ([super getFieldFLOAT32ValueForField:54 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgNegGrade:(FITFloat32)avgNegGrade { + [super setFieldFLOAT32ValueForField:54 andValue:(avgNegGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPosGrade +- (BOOL)isMaxPosGradeValid { + const fit::Field* field = [super getField:55]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxPosGrade { + return ([super getFieldFLOAT32ValueForField:55 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPosGrade:(FITFloat32)maxPosGrade { + [super setFieldFLOAT32ValueForField:55 andValue:(maxPosGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxNegGrade +- (BOOL)isMaxNegGradeValid { + const fit::Field* field = [super getField:56]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxNegGrade { + return ([super getFieldFLOAT32ValueForField:56 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxNegGrade:(FITFloat32)maxNegGrade { + [super setFieldFLOAT32ValueForField:56 andValue:(maxNegGrade) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgTemperature +- (BOOL)isAvgTemperatureValid { + const fit::Field* field = [super getField:57]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgTemperature { + return ([super getFieldSINT8ValueForField:57 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgTemperature:(FITSInt8)avgTemperature { + [super setFieldSINT8ValueForField:57 andValue:(avgTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxTemperature +- (BOOL)isMaxTemperatureValid { + const fit::Field* field = [super getField:58]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getMaxTemperature { + return ([super getFieldSINT8ValueForField:58 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxTemperature:(FITSInt8)maxTemperature { + [super setFieldSINT8ValueForField:58 andValue:(maxTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalMovingTime +- (BOOL)isTotalMovingTimeValid { + const fit::Field* field = [super getField:59]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalMovingTime { + return ([super getFieldFLOAT32ValueForField:59 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalMovingTime:(FITFloat32)totalMovingTime { + [super setFieldFLOAT32ValueForField:59 andValue:(totalMovingTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPosVerticalSpeed +- (BOOL)isAvgPosVerticalSpeedValid { + const fit::Field* field = [super getField:60]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgPosVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:60 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPosVerticalSpeed:(FITFloat32)avgPosVerticalSpeed { + [super setFieldFLOAT32ValueForField:60 andValue:(avgPosVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgNegVerticalSpeed +- (BOOL)isAvgNegVerticalSpeedValid { + const fit::Field* field = [super getField:61]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgNegVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:61 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgNegVerticalSpeed:(FITFloat32)avgNegVerticalSpeed { + [super setFieldFLOAT32ValueForField:61 andValue:(avgNegVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPosVerticalSpeed +- (BOOL)isMaxPosVerticalSpeedValid { + const fit::Field* field = [super getField:62]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxPosVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:62 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPosVerticalSpeed:(FITFloat32)maxPosVerticalSpeed { + [super setFieldFLOAT32ValueForField:62 andValue:(maxPosVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxNegVerticalSpeed +- (BOOL)isMaxNegVerticalSpeedValid { + const fit::Field* field = [super getField:63]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxNegVerticalSpeed { + return ([super getFieldFLOAT32ValueForField:63 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxNegVerticalSpeed:(FITFloat32)maxNegVerticalSpeed { + [super setFieldFLOAT32ValueForField:63 andValue:(maxNegVerticalSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinHeartRate +- (BOOL)isMinHeartRateValid { + const fit::Field* field = [super getField:64]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMinHeartRate { + return ([super getFieldUINT8ValueForField:64 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinHeartRate:(FITUInt8)minHeartRate { + [super setFieldUINT8ValueForField:64 andValue:(minHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInHrZone +- (uint8_t)numTimeInHrZoneValues { + return [super getFieldNumValuesForField:65 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInHrZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:65]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInHrZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:65 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInHrZone:(FITFloat32)timeInHrZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:65 andValue:(timeInHrZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInSpeedZone +- (uint8_t)numTimeInSpeedZoneValues { + return [super getFieldNumValuesForField:66 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInSpeedZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:66]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInSpeedZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:66 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInSpeedZone:(FITFloat32)timeInSpeedZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:66 andValue:(timeInSpeedZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInCadenceZone +- (uint8_t)numTimeInCadenceZoneValues { + return [super getFieldNumValuesForField:67 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInCadenceZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:67]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInCadenceZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:67 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInCadenceZone:(FITFloat32)timeInCadenceZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:67 andValue:(timeInCadenceZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeInPowerZone +- (uint8_t)numTimeInPowerZoneValues { + return [super getFieldNumValuesForField:68 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isTimeInPowerZoneValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:68]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeInPowerZoneforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:68 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeInPowerZone:(FITFloat32)timeInPowerZone forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:68 andValue:(timeInPowerZone) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLapTime +- (BOOL)isAvgLapTimeValid { + const fit::Field* field = [super getField:69]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLapTime { + return ([super getFieldFLOAT32ValueForField:69 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLapTime:(FITFloat32)avgLapTime { + [super setFieldFLOAT32ValueForField:69 andValue:(avgLapTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BestLapIndex +- (BOOL)isBestLapIndexValid { + const fit::Field* field = [super getField:70]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getBestLapIndex { + return ([super getFieldUINT16ValueForField:70 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBestLapIndex:(FITUInt16)bestLapIndex { + [super setFieldUINT16ValueForField:70 andValue:(bestLapIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinAltitude +- (BOOL)isMinAltitudeValid { + const fit::Field* field = [super getField:71]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinAltitude { + return ([super getFieldFLOAT32ValueForField:71 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinAltitude:(FITFloat32)minAltitude { + [super setFieldFLOAT32ValueForField:71 andValue:(minAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PlayerScore +- (BOOL)isPlayerScoreValid { + const fit::Field* field = [super getField:82]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getPlayerScore { + return ([super getFieldUINT16ValueForField:82 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPlayerScore:(FITUInt16)playerScore { + [super setFieldUINT16ValueForField:82 andValue:(playerScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OpponentScore +- (BOOL)isOpponentScoreValid { + const fit::Field* field = [super getField:83]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getOpponentScore { + return ([super getFieldUINT16ValueForField:83 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOpponentScore:(FITUInt16)opponentScore { + [super setFieldUINT16ValueForField:83 andValue:(opponentScore) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OpponentName +- (BOOL)isOpponentNameValid { + const fit::Field* field = [super getField:84]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getOpponentName { + return ([super getFieldSTRINGValueForField:84 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOpponentName:(NSString *)opponentName { + [super setFieldSTRINGValueForField:84 andValue:(opponentName) forIndex:0]; +} + +// StrokeCount +- (uint8_t)numStrokeCountValues { + return [super getFieldNumValuesForField:85 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isStrokeCountValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:85]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStrokeCountforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:85 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStrokeCount:(FITUInt16)strokeCount forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:85 andValue:(strokeCount) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ZoneCount +- (uint8_t)numZoneCountValues { + return [super getFieldNumValuesForField:86 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isZoneCountValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:86]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getZoneCountforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:86 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setZoneCount:(FITUInt16)zoneCount forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:86 andValue:(zoneCount) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxBallSpeed +- (BOOL)isMaxBallSpeedValid { + const fit::Field* field = [super getField:87]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxBallSpeed { + return ([super getFieldFLOAT32ValueForField:87 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxBallSpeed:(FITFloat32)maxBallSpeed { + [super setFieldFLOAT32ValueForField:87 andValue:(maxBallSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgBallSpeed +- (BOOL)isAvgBallSpeedValid { + const fit::Field* field = [super getField:88]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgBallSpeed { + return ([super getFieldFLOAT32ValueForField:88 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgBallSpeed:(FITFloat32)avgBallSpeed { + [super setFieldFLOAT32ValueForField:88 andValue:(avgBallSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgVerticalOscillation +- (BOOL)isAvgVerticalOscillationValid { + const fit::Field* field = [super getField:89]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgVerticalOscillation { + return ([super getFieldFLOAT32ValueForField:89 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgVerticalOscillation:(FITFloat32)avgVerticalOscillation { + [super setFieldFLOAT32ValueForField:89 andValue:(avgVerticalOscillation) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStanceTimePercent +- (BOOL)isAvgStanceTimePercentValid { + const fit::Field* field = [super getField:90]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStanceTimePercent { + return ([super getFieldFLOAT32ValueForField:90 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStanceTimePercent:(FITFloat32)avgStanceTimePercent { + [super setFieldFLOAT32ValueForField:90 andValue:(avgStanceTimePercent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStanceTime +- (BOOL)isAvgStanceTimeValid { + const fit::Field* field = [super getField:91]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStanceTime { + return ([super getFieldFLOAT32ValueForField:91 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStanceTime:(FITFloat32)avgStanceTime { + [super setFieldFLOAT32ValueForField:91 andValue:(avgStanceTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgFractionalCadence +- (BOOL)isAvgFractionalCadenceValid { + const fit::Field* field = [super getField:92]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgFractionalCadence { + return ([super getFieldFLOAT32ValueForField:92 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgFractionalCadence:(FITFloat32)avgFractionalCadence { + [super setFieldFLOAT32ValueForField:92 andValue:(avgFractionalCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxFractionalCadence +- (BOOL)isMaxFractionalCadenceValid { + const fit::Field* field = [super getField:93]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxFractionalCadence { + return ([super getFieldFLOAT32ValueForField:93 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxFractionalCadence:(FITFloat32)maxFractionalCadence { + [super setFieldFLOAT32ValueForField:93 andValue:(maxFractionalCadence) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalCycles +- (BOOL)isTotalFractionalCyclesValid { + const fit::Field* field = [super getField:94]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalCycles { + return ([super getFieldFLOAT32ValueForField:94 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalCycles:(FITFloat32)totalFractionalCycles { + [super setFieldFLOAT32ValueForField:94 andValue:(totalFractionalCycles) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgTotalHemoglobinConc +- (uint8_t)numAvgTotalHemoglobinConcValues { + return [super getFieldNumValuesForField:95 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgTotalHemoglobinConcValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:95]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgTotalHemoglobinConcforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:95 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgTotalHemoglobinConc:(FITFloat32)avgTotalHemoglobinConc forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:95 andValue:(avgTotalHemoglobinConc) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinTotalHemoglobinConc +- (uint8_t)numMinTotalHemoglobinConcValues { + return [super getFieldNumValuesForField:96 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMinTotalHemoglobinConcValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:96]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinTotalHemoglobinConcforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:96 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinTotalHemoglobinConc:(FITFloat32)minTotalHemoglobinConc forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:96 andValue:(minTotalHemoglobinConc) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxTotalHemoglobinConc +- (uint8_t)numMaxTotalHemoglobinConcValues { + return [super getFieldNumValuesForField:97 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxTotalHemoglobinConcValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:97]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxTotalHemoglobinConcforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:97 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxTotalHemoglobinConc:(FITFloat32)maxTotalHemoglobinConc forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:97 andValue:(maxTotalHemoglobinConc) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgSaturatedHemoglobinPercent +- (uint8_t)numAvgSaturatedHemoglobinPercentValues { + return [super getFieldNumValuesForField:98 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgSaturatedHemoglobinPercentValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:98]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgSaturatedHemoglobinPercentforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:98 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgSaturatedHemoglobinPercent:(FITFloat32)avgSaturatedHemoglobinPercent forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:98 andValue:(avgSaturatedHemoglobinPercent) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinSaturatedHemoglobinPercent +- (uint8_t)numMinSaturatedHemoglobinPercentValues { + return [super getFieldNumValuesForField:99 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMinSaturatedHemoglobinPercentValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:99]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinSaturatedHemoglobinPercentforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:99 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinSaturatedHemoglobinPercent:(FITFloat32)minSaturatedHemoglobinPercent forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:99 andValue:(minSaturatedHemoglobinPercent) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxSaturatedHemoglobinPercent +- (uint8_t)numMaxSaturatedHemoglobinPercentValues { + return [super getFieldNumValuesForField:100 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxSaturatedHemoglobinPercentValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:100]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxSaturatedHemoglobinPercentforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:100 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxSaturatedHemoglobinPercent:(FITFloat32)maxSaturatedHemoglobinPercent forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:100 andValue:(maxSaturatedHemoglobinPercent) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftTorqueEffectiveness +- (BOOL)isAvgLeftTorqueEffectivenessValid { + const fit::Field* field = [super getField:101]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:101 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftTorqueEffectiveness:(FITFloat32)avgLeftTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:101 andValue:(avgLeftTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightTorqueEffectiveness +- (BOOL)isAvgRightTorqueEffectivenessValid { + const fit::Field* field = [super getField:102]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightTorqueEffectiveness { + return ([super getFieldFLOAT32ValueForField:102 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightTorqueEffectiveness:(FITFloat32)avgRightTorqueEffectiveness { + [super setFieldFLOAT32ValueForField:102 andValue:(avgRightTorqueEffectiveness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPedalSmoothness +- (BOOL)isAvgLeftPedalSmoothnessValid { + const fit::Field* field = [super getField:103]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:103 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPedalSmoothness:(FITFloat32)avgLeftPedalSmoothness { + [super setFieldFLOAT32ValueForField:103 andValue:(avgLeftPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPedalSmoothness +- (BOOL)isAvgRightPedalSmoothnessValid { + const fit::Field* field = [super getField:104]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:104 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPedalSmoothness:(FITFloat32)avgRightPedalSmoothness { + [super setFieldFLOAT32ValueForField:104 andValue:(avgRightPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCombinedPedalSmoothness +- (BOOL)isAvgCombinedPedalSmoothnessValid { + const fit::Field* field = [super getField:105]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgCombinedPedalSmoothness { + return ([super getFieldFLOAT32ValueForField:105 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCombinedPedalSmoothness:(FITFloat32)avgCombinedPedalSmoothness { + [super setFieldFLOAT32ValueForField:105 andValue:(avgCombinedPedalSmoothness) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SportIndex +- (BOOL)isSportIndexValid { + const fit::Field* field = [super getField:111]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getSportIndex { + return ([super getFieldUINT8ValueForField:111 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSportIndex:(FITUInt8)sportIndex { + [super setFieldUINT8ValueForField:111 andValue:(sportIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeStanding +- (BOOL)isTimeStandingValid { + const fit::Field* field = [super getField:112]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTimeStanding { + return ([super getFieldFLOAT32ValueForField:112 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeStanding:(FITFloat32)timeStanding { + [super setFieldFLOAT32ValueForField:112 andValue:(timeStanding) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StandCount +- (BOOL)isStandCountValid { + const fit::Field* field = [super getField:113]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStandCount { + return ([super getFieldUINT16ValueForField:113 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStandCount:(FITUInt16)standCount { + [super setFieldUINT16ValueForField:113 andValue:(standCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPco +- (BOOL)isAvgLeftPcoValid { + const fit::Field* field = [super getField:114]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgLeftPco { + return ([super getFieldSINT8ValueForField:114 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPco:(FITSInt8)avgLeftPco { + [super setFieldSINT8ValueForField:114 andValue:(avgLeftPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPco +- (BOOL)isAvgRightPcoValid { + const fit::Field* field = [super getField:115]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getAvgRightPco { + return ([super getFieldSINT8ValueForField:115 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPco:(FITSInt8)avgRightPco { + [super setFieldSINT8ValueForField:115 andValue:(avgRightPco) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPowerPhase +- (uint8_t)numAvgLeftPowerPhaseValues { + return [super getFieldNumValuesForField:116 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgLeftPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:116]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:116 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPowerPhase:(FITFloat32)avgLeftPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:116 andValue:(avgLeftPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLeftPowerPhasePeak +- (uint8_t)numAvgLeftPowerPhasePeakValues { + return [super getFieldNumValuesForField:117 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgLeftPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:117]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgLeftPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:117 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLeftPowerPhasePeak:(FITFloat32)avgLeftPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:117 andValue:(avgLeftPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPowerPhase +- (uint8_t)numAvgRightPowerPhaseValues { + return [super getFieldNumValuesForField:118 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgRightPowerPhaseValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:118]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPowerPhaseforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:118 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPowerPhase:(FITFloat32)avgRightPowerPhase forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:118 andValue:(avgRightPowerPhase) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgRightPowerPhasePeak +- (uint8_t)numAvgRightPowerPhasePeakValues { + return [super getFieldNumValuesForField:119 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgRightPowerPhasePeakValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:119]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgRightPowerPhasePeakforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:119 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgRightPowerPhasePeak:(FITFloat32)avgRightPowerPhasePeak forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:119 andValue:(avgRightPowerPhasePeak) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgPowerPosition +- (uint8_t)numAvgPowerPositionValues { + return [super getFieldNumValuesForField:120 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgPowerPositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:120]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgPowerPositionforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:120 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgPowerPosition:(FITUInt16)avgPowerPosition forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:120 andValue:(avgPowerPosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxPowerPosition +- (uint8_t)numMaxPowerPositionValues { + return [super getFieldNumValuesForField:121 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxPowerPositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:121]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxPowerPositionforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:121 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxPowerPosition:(FITUInt16)maxPowerPosition forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:121 andValue:(maxPowerPosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCadencePosition +- (uint8_t)numAvgCadencePositionValues { + return [super getFieldNumValuesForField:122 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isAvgCadencePositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:122]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAvgCadencePositionforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:122 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCadencePosition:(FITUInt8)avgCadencePosition forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:122 andValue:(avgCadencePosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxCadencePosition +- (uint8_t)numMaxCadencePositionValues { + return [super getFieldNumValuesForField:123 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isMaxCadencePositionValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:123]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxCadencePositionforIndex:(uint8_t)index { + return ([super getFieldUINT8ValueForField:123 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCadencePosition:(FITUInt8)maxCadencePosition forIndex:(uint8_t)index { + [super setFieldUINT8ValueForField:123 andValue:(maxCadencePosition) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedAvgSpeed +- (BOOL)isEnhancedAvgSpeedValid { + const fit::Field* field = [super getField:124]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedAvgSpeed { + return ([super getFieldFLOAT32ValueForField:124 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedAvgSpeed:(FITFloat32)enhancedAvgSpeed { + [super setFieldFLOAT32ValueForField:124 andValue:(enhancedAvgSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedMaxSpeed +- (BOOL)isEnhancedMaxSpeedValid { + const fit::Field* field = [super getField:125]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedMaxSpeed { + return ([super getFieldFLOAT32ValueForField:125 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedMaxSpeed:(FITFloat32)enhancedMaxSpeed { + [super setFieldFLOAT32ValueForField:125 andValue:(enhancedMaxSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedAvgAltitude +- (BOOL)isEnhancedAvgAltitudeValid { + const fit::Field* field = [super getField:126]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedAvgAltitude { + return ([super getFieldFLOAT32ValueForField:126 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedAvgAltitude:(FITFloat32)enhancedAvgAltitude { + [super setFieldFLOAT32ValueForField:126 andValue:(enhancedAvgAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedMinAltitude +- (BOOL)isEnhancedMinAltitudeValid { + const fit::Field* field = [super getField:127]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedMinAltitude { + return ([super getFieldFLOAT32ValueForField:127 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedMinAltitude:(FITFloat32)enhancedMinAltitude { + [super setFieldFLOAT32ValueForField:127 andValue:(enhancedMinAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EnhancedMaxAltitude +- (BOOL)isEnhancedMaxAltitudeValid { + const fit::Field* field = [super getField:128]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getEnhancedMaxAltitude { + return ([super getFieldFLOAT32ValueForField:128 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEnhancedMaxAltitude:(FITFloat32)enhancedMaxAltitude { + [super setFieldFLOAT32ValueForField:128 andValue:(enhancedMaxAltitude) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgLevMotorPower +- (BOOL)isAvgLevMotorPowerValid { + const fit::Field* field = [super getField:129]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getAvgLevMotorPower { + return ([super getFieldUINT16ValueForField:129 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgLevMotorPower:(FITUInt16)avgLevMotorPower { + [super setFieldUINT16ValueForField:129 andValue:(avgLevMotorPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxLevMotorPower +- (BOOL)isMaxLevMotorPowerValid { + const fit::Field* field = [super getField:130]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMaxLevMotorPower { + return ([super getFieldUINT16ValueForField:130 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxLevMotorPower:(FITUInt16)maxLevMotorPower { + [super setFieldUINT16ValueForField:130 andValue:(maxLevMotorPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LevBatteryConsumption +- (BOOL)isLevBatteryConsumptionValid { + const fit::Field* field = [super getField:131]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getLevBatteryConsumption { + return ([super getFieldFLOAT32ValueForField:131 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLevBatteryConsumption:(FITFloat32)levBatteryConsumption { + [super setFieldFLOAT32ValueForField:131 andValue:(levBatteryConsumption) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgVerticalRatio +- (BOOL)isAvgVerticalRatioValid { + const fit::Field* field = [super getField:132]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgVerticalRatio { + return ([super getFieldFLOAT32ValueForField:132 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgVerticalRatio:(FITFloat32)avgVerticalRatio { + [super setFieldFLOAT32ValueForField:132 andValue:(avgVerticalRatio) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStanceTimeBalance +- (BOOL)isAvgStanceTimeBalanceValid { + const fit::Field* field = [super getField:133]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStanceTimeBalance { + return ([super getFieldFLOAT32ValueForField:133 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStanceTimeBalance:(FITFloat32)avgStanceTimeBalance { + [super setFieldFLOAT32ValueForField:133 andValue:(avgStanceTimeBalance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgStepLength +- (BOOL)isAvgStepLengthValid { + const fit::Field* field = [super getField:134]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgStepLength { + return ([super getFieldFLOAT32ValueForField:134 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgStepLength:(FITFloat32)avgStepLength { + [super setFieldFLOAT32ValueForField:134 andValue:(avgStepLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalAnaerobicTrainingEffect +- (BOOL)isTotalAnaerobicTrainingEffectValid { + const fit::Field* field = [super getField:137]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalAnaerobicTrainingEffect { + return ([super getFieldFLOAT32ValueForField:137 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalAnaerobicTrainingEffect:(FITFloat32)totalAnaerobicTrainingEffect { + [super setFieldFLOAT32ValueForField:137 andValue:(totalAnaerobicTrainingEffect) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgVam +- (BOOL)isAvgVamValid { + const fit::Field* field = [super getField:139]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgVam { + return ([super getFieldFLOAT32ValueForField:139 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgVam:(FITFloat32)avgVam { + [super setFieldFLOAT32ValueForField:139 andValue:(avgVam) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TrainingLoadPeak +- (BOOL)isTrainingLoadPeakValid { + const fit::Field* field = [super getField:168]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTrainingLoadPeak { + return ([super getFieldFLOAT32ValueForField:168 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTrainingLoadPeak:(FITFloat32)trainingLoadPeak { + [super setFieldFLOAT32ValueForField:168 andValue:(trainingLoadPeak) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalGrit +- (BOOL)isTotalGritValid { + const fit::Field* field = [super getField:181]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalGrit { + return ([super getFieldFLOAT32ValueForField:181 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalGrit:(FITFloat32)totalGrit { + [super setFieldFLOAT32ValueForField:181 andValue:(totalGrit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFlow +- (BOOL)isTotalFlowValid { + const fit::Field* field = [super getField:182]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFlow { + return ([super getFieldFLOAT32ValueForField:182 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFlow:(FITFloat32)totalFlow { + [super setFieldFLOAT32ValueForField:182 andValue:(totalFlow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// JumpCount +- (BOOL)isJumpCountValid { + const fit::Field* field = [super getField:183]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getJumpCount { + return ([super getFieldUINT16ValueForField:183 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setJumpCount:(FITUInt16)jumpCount { + [super setFieldUINT16ValueForField:183 andValue:(jumpCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgGrit +- (BOOL)isAvgGritValid { + const fit::Field* field = [super getField:186]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgGrit { + return ([super getFieldFLOAT32ValueForField:186 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgGrit:(FITFloat32)avgGrit { + [super setFieldFLOAT32ValueForField:186 andValue:(avgGrit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgFlow +- (BOOL)isAvgFlowValid { + const fit::Field* field = [super getField:187]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgFlow { + return ([super getFieldFLOAT32ValueForField:187 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgFlow:(FITFloat32)avgFlow { + [super setFieldFLOAT32ValueForField:187 andValue:(avgFlow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalAscent +- (BOOL)isTotalFractionalAscentValid { + const fit::Field* field = [super getField:199]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalAscent { + return ([super getFieldFLOAT32ValueForField:199 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalAscent:(FITFloat32)totalFractionalAscent { + [super setFieldFLOAT32ValueForField:199 andValue:(totalFractionalAscent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TotalFractionalDescent +- (BOOL)isTotalFractionalDescentValid { + const fit::Field* field = [super getField:200]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getTotalFractionalDescent { + return ([super getFieldFLOAT32ValueForField:200 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTotalFractionalDescent:(FITFloat32)totalFractionalDescent { + [super setFieldFLOAT32ValueForField:200 andValue:(totalFractionalDescent) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// AvgCoreTemperature +- (BOOL)isAvgCoreTemperatureValid { + const fit::Field* field = [super getField:208]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getAvgCoreTemperature { + return ([super getFieldFLOAT32ValueForField:208 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAvgCoreTemperature:(FITFloat32)avgCoreTemperature { + [super setFieldFLOAT32ValueForField:208 andValue:(avgCoreTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MinCoreTemperature +- (BOOL)isMinCoreTemperatureValid { + const fit::Field* field = [super getField:209]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMinCoreTemperature { + return ([super getFieldFLOAT32ValueForField:209 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMinCoreTemperature:(FITFloat32)minCoreTemperature { + [super setFieldFLOAT32ValueForField:209 andValue:(minCoreTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MaxCoreTemperature +- (BOOL)isMaxCoreTemperatureValid { + const fit::Field* field = [super getField:210]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMaxCoreTemperature { + return ([super getFieldFLOAT32ValueForField:210 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxCoreTemperature:(FITFloat32)maxCoreTemperature { + [super setFieldFLOAT32ValueForField:210 andValue:(maxCoreTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSetMesg.mm b/Sources/ObjcFIT/FITSetMesg.mm new file mode 100644 index 0000000..1d9b972 --- /dev/null +++ b/Sources/ObjcFIT/FITSetMesg.mm @@ -0,0 +1,232 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITSetMesg.h" + +@implementation FITSetMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SET]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:254 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Duration +- (BOOL)isDurationValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDuration { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDuration:(FITFloat32)duration { + [super setFieldFLOAT32ValueForField:0 andValue:(duration) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Repetitions +- (BOOL)isRepetitionsValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getRepetitions { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRepetitions:(FITUInt16)repetitions { + [super setFieldUINT16ValueForField:3 andValue:(repetitions) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Weight +- (BOOL)isWeightValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getWeight { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeight:(FITFloat32)weight { + [super setFieldFLOAT32ValueForField:4 andValue:(weight) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SetType +- (BOOL)isSetTypeValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSetType)getSetType { + return ([super getFieldUINT8ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSetType:(FITSetType)setType { + [super setFieldUINT8ValueForField:5 andValue:(setType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTime +- (BOOL)isStartTimeValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTime:(FITDate *)startTime { + [super setFieldUINT32ValueForField:6 andValue:TimestampFromFITDate(startTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Category +- (uint8_t)numCategoryValues { + return [super getFieldNumValuesForField:7 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCategoryValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExerciseCategory)getCategoryforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:7 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCategory:(FITExerciseCategory)category forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:7 andValue:(category) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CategorySubtype +- (uint8_t)numCategorySubtypeValues { + return [super getFieldNumValuesForField:8 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isCategorySubtypeValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getCategorySubtypeforIndex:(uint8_t)index { + return ([super getFieldUINT16ValueForField:8 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCategorySubtype:(FITUInt16)categorySubtype forIndex:(uint8_t)index { + [super setFieldUINT16ValueForField:8 andValue:(categorySubtype) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WeightDisplayUnit +- (BOOL)isWeightDisplayUnitValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFitBaseUnit)getWeightDisplayUnit { + return ([super getFieldUINT16ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeightDisplayUnit:(FITFitBaseUnit)weightDisplayUnit { + [super setFieldUINT16ValueForField:9 andValue:(weightDisplayUnit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:10 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WktStepIndex +- (BOOL)isWktStepIndexValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getWktStepIndex { + return ([super getFieldUINT16ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWktStepIndex:(FITMessageIndex)wktStepIndex { + [super setFieldUINT16ValueForField:11 andValue:(wktStepIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITSlaveDeviceMesg.mm b/Sources/ObjcFIT/FITSlaveDeviceMesg.mm new file mode 100644 index 0000000..7110d47 --- /dev/null +++ b/Sources/ObjcFIT/FITSlaveDeviceMesg.mm @@ -0,0 +1,111 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITSlaveDeviceMesg.h" + +@implementation FITSlaveDeviceMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SLAVE_DEVICE]; + + return self; +} + +// Manufacturer +- (BOOL)isManufacturerValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITManufacturer)getManufacturer { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setManufacturer:(FITManufacturer)manufacturer { + [super setFieldUINT16ValueForField:0 andValue:(manufacturer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Product +- (BOOL)isProductValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getProduct { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setProduct:(FITUInt16)product { + [super setFieldUINT16ValueForField:1 andValue:(product) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Product - Sub Fields +// FaveroProduct - Product Field - Sub Field +- (BOOL)isFaveroProductValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITSlaveDeviceMesgProductFieldFaveroProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITSlaveDeviceMesgProductFieldFaveroProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFaveroProduct)getFaveroProduct +{ + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FITSlaveDeviceMesgProductFieldFaveroProductSubField]); +} + +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct +{ + [super setFieldUINT16ValueForField:1 andValue:(faveroProduct) forIndex:0 andSubFieldIndex:FITSlaveDeviceMesgProductFieldFaveroProductSubField]; +} +// GarminProduct - Product Field - Sub Field +- (BOOL)isGarminProductValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITSlaveDeviceMesgProductFieldGarminProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITSlaveDeviceMesgProductFieldGarminProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGarminProduct)getGarminProduct +{ + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FITSlaveDeviceMesgProductFieldGarminProductSubField]); +} + +- (void)setGarminProduct:(FITGarminProduct)garminProduct +{ + [super setFieldUINT16ValueForField:1 andValue:(garminProduct) forIndex:0 andSubFieldIndex:FITSlaveDeviceMesgProductFieldGarminProductSubField]; +} + +@end diff --git a/Sources/ObjcFIT/FITSoftwareMesg.mm b/Sources/ObjcFIT/FITSoftwareMesg.mm new file mode 100644 index 0000000..92828c3 --- /dev/null +++ b/Sources/ObjcFIT/FITSoftwareMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSoftwareMesg.h" + +@implementation FITSoftwareMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SOFTWARE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Version +- (BOOL)isVersionValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getVersion { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVersion:(FITFloat32)version { + [super setFieldFLOAT32ValueForField:3 andValue:(version) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PartNumber +- (BOOL)isPartNumberValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getPartNumber { + return ([super getFieldSTRINGValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPartNumber:(NSString *)partNumber { + [super setFieldSTRINGValueForField:5 andValue:(partNumber) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITSpeedZoneMesg.mm b/Sources/ObjcFIT/FITSpeedZoneMesg.mm new file mode 100644 index 0000000..a7ef004 --- /dev/null +++ b/Sources/ObjcFIT/FITSpeedZoneMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSpeedZoneMesg.h" + +@implementation FITSpeedZoneMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SPEED_ZONE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HighValue +- (BOOL)isHighValueValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getHighValue { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHighValue:(FITFloat32)highValue { + [super setFieldFLOAT32ValueForField:0 andValue:(highValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:1 andValue:(name) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITSportMesg.mm b/Sources/ObjcFIT/FITSportMesg.mm new file mode 100644 index 0000000..596ff78 --- /dev/null +++ b/Sources/ObjcFIT/FITSportMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITSportMesg.h" + +@implementation FITSportMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_SPORT]; + + return self; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:0 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:1 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Name +- (BOOL)isNameValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getName { + return ([super getFieldSTRINGValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setName:(NSString *)name { + [super setFieldSTRINGValueForField:3 andValue:(name) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITStressLevelMesg.mm b/Sources/ObjcFIT/FITStressLevelMesg.mm new file mode 100644 index 0000000..c03c952 --- /dev/null +++ b/Sources/ObjcFIT/FITStressLevelMesg.mm @@ -0,0 +1,62 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITStressLevelMesg.h" + +@implementation FITStressLevelMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_STRESS_LEVEL]; + + return self; +} + +// StressLevelValue +- (BOOL)isStressLevelValueValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt16)getStressLevelValue { + return ([super getFieldSINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStressLevelValue:(FITSInt16)stressLevelValue { + [super setFieldSINT16ValueForField:0 andValue:(stressLevelValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StressLevelTime +- (BOOL)isStressLevelTimeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStressLevelTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStressLevelTime:(FITDate *)stressLevelTime { + [super setFieldUINT32ValueForField:1 andValue:TimestampFromFITDate(stressLevelTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITString.h b/Sources/ObjcFIT/FITString.h new file mode 100644 index 0000000..e693779 --- /dev/null +++ b/Sources/ObjcFIT/FITString.h @@ -0,0 +1,39 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import +#include + +#import "FITTypes.h" + +typedef std::wstring FIT_WSTRING; // Returned by message/field "Get" APIs and required by "Set" APIs. Encoding defined in fit_config.hpp. +typedef const FIT_WSTRING * FIT_CONST_WSTRING_PTR; +#define FIT_WSTRING_INVALID (FIT_WSTRING()) + + +NS_ASSUME_NONNULL_BEGIN + +@interface FITString : NSObject + ++ (FIT_WSTRING) fitStringWithString: (NSString *) string; ++ (NSString *) stringWithFITString: (FIT_WSTRING) string; +@end + +NS_INLINE FIT_WSTRING FITStringFromString(NSString * string) { + return [FITString fitStringWithString:string]; +} + +NS_INLINE NSString * StringFromFITString(FIT_WSTRING string) { + return [FITString stringWithFITString:string]; +} + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/FITString.mm b/Sources/ObjcFIT/FITString.mm new file mode 100644 index 0000000..a8bd8c8 --- /dev/null +++ b/Sources/ObjcFIT/FITString.mm @@ -0,0 +1,31 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITString.h" + +@implementation FITString + ++ (FIT_WSTRING) fitStringWithString:(NSString *) string +{ + NSData *stringData = [string dataUsingEncoding:NSUTF32LittleEndianStringEncoding]; + std::wstring wstring((wchar_t *)stringData.bytes, stringData.length / 4); + + return wstring; + +} + ++ (NSString *) stringWithFITString:(FIT_WSTRING) string { + return [[NSString alloc] initWithBytes:string.data() + length:string.size() * sizeof(wchar_t) + encoding:NSUTF32LittleEndianStringEncoding]; +} +@end diff --git a/Sources/ObjcFIT/FITThreeDSensorCalibrationMesg.mm b/Sources/ObjcFIT/FITThreeDSensorCalibrationMesg.mm new file mode 100644 index 0000000..60b9ca5 --- /dev/null +++ b/Sources/ObjcFIT/FITThreeDSensorCalibrationMesg.mm @@ -0,0 +1,209 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITThreeDSensorCalibrationMesg.h" + +@implementation FITThreeDSensorCalibrationMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_THREE_D_SENSOR_CALIBRATION]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SensorType +- (BOOL)isSensorTypeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSensorType)getSensorType { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSensorType:(FITSensorType)sensorType { + [super setFieldENUMValueForField:0 andValue:(sensorType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// CalibrationFactor +- (BOOL)isCalibrationFactorValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCalibrationFactor { + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibrationFactor:(FITUInt32)calibrationFactor { + [super setFieldUINT32ValueForField:1 andValue:(calibrationFactor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// CalibrationFactor - Sub Fields +// AccelCalFactor - CalibrationFactor Field - Sub Field +- (BOOL)isAccelCalFactorValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITThreeDSensorCalibrationMesgCalibrationFactorFieldAccelCalFactorSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITThreeDSensorCalibrationMesgCalibrationFactorFieldAccelCalFactorSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getAccelCalFactor +{ + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FITThreeDSensorCalibrationMesgCalibrationFactorFieldAccelCalFactorSubField]); +} + +- (void)setAccelCalFactor:(FITUInt32)accelCalFactor +{ + [super setFieldUINT32ValueForField:1 andValue:(accelCalFactor) forIndex:0 andSubFieldIndex:FITThreeDSensorCalibrationMesgCalibrationFactorFieldAccelCalFactorSubField]; +} +// GyroCalFactor - CalibrationFactor Field - Sub Field +- (BOOL)isGyroCalFactorValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITThreeDSensorCalibrationMesgCalibrationFactorFieldGyroCalFactorSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITThreeDSensorCalibrationMesgCalibrationFactorFieldGyroCalFactorSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getGyroCalFactor +{ + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FITThreeDSensorCalibrationMesgCalibrationFactorFieldGyroCalFactorSubField]); +} + +- (void)setGyroCalFactor:(FITUInt32)gyroCalFactor +{ + [super setFieldUINT32ValueForField:1 andValue:(gyroCalFactor) forIndex:0 andSubFieldIndex:FITThreeDSensorCalibrationMesgCalibrationFactorFieldGyroCalFactorSubField]; +} + +// CalibrationDivisor +- (BOOL)isCalibrationDivisorValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCalibrationDivisor { + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalibrationDivisor:(FITUInt32)calibrationDivisor { + [super setFieldUINT32ValueForField:2 andValue:(calibrationDivisor) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LevelShift +- (BOOL)isLevelShiftValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getLevelShift { + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLevelShift:(FITUInt32)levelShift { + [super setFieldUINT32ValueForField:3 andValue:(levelShift) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OffsetCal +- (uint8_t)numOffsetCalValues { + return [super getFieldNumValuesForField:4 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isOffsetCalValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getOffsetCalforIndex:(uint8_t)index { + return ([super getFieldSINT32ValueForField:4 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOffsetCal:(FITSInt32)offsetCal forIndex:(uint8_t)index { + [super setFieldSINT32ValueForField:4 andValue:(offsetCal) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// OrientationMatrix +- (uint8_t)numOrientationMatrixValues { + return [super getFieldNumValuesForField:5 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isOrientationMatrixValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getOrientationMatrixforIndex:(uint8_t)index { + return ([super getFieldFLOAT32ValueForField:5 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setOrientationMatrix:(FITFloat32)orientationMatrix forIndex:(uint8_t)index { + [super setFieldFLOAT32ValueForField:5 andValue:(orientationMatrix) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITTimestampCorrelationMesg.mm b/Sources/ObjcFIT/FITTimestampCorrelationMesg.mm new file mode 100644 index 0000000..03c320c --- /dev/null +++ b/Sources/ObjcFIT/FITTimestampCorrelationMesg.mm @@ -0,0 +1,152 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITTimestampCorrelationMesg.h" + +@implementation FITTimestampCorrelationMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_TIMESTAMP_CORRELATION]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFractionalTimestamp { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp { + [super setFieldFLOAT32ValueForField:0 andValue:(fractionalTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SystemTimestamp +- (BOOL)isSystemTimestampValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getSystemTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSystemTimestamp:(FITDate *)systemTimestamp { + [super setFieldUINT32ValueForField:1 andValue:TimestampFromFITDate(systemTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FractionalSystemTimestamp +- (BOOL)isFractionalSystemTimestampValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getFractionalSystemTimestamp { + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFractionalSystemTimestamp:(FITFloat32)fractionalSystemTimestamp { + [super setFieldFLOAT32ValueForField:2 andValue:(fractionalSystemTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LocalTimestamp +- (BOOL)isLocalTimestampValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocalDateTime)getLocalTimestamp { + return ([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp { + [super setFieldUINT32ValueForField:3 andValue:(localTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:4 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SystemTimestampMs +- (BOOL)isSystemTimestampMsValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSystemTimestampMs { + return ([super getFieldUINT16ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSystemTimestampMs:(FITUInt16)systemTimestampMs { + [super setFieldUINT16ValueForField:5 andValue:(systemTimestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITTotalsMesg.mm b/Sources/ObjcFIT/FITTotalsMesg.mm new file mode 100644 index 0000000..ba6b46d --- /dev/null +++ b/Sources/ObjcFIT/FITTotalsMesg.mm @@ -0,0 +1,206 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITTotalsMesg.h" + +@implementation FITTotalsMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_TOTALS]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimerTime +- (BOOL)isTimerTimeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTimerTime { + return ([super getFieldUINT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimerTime:(FITUInt32)timerTime { + [super setFieldUINT32ValueForField:0 andValue:(timerTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Distance +- (BOOL)isDistanceValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDistance { + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistance:(FITUInt32)distance { + [super setFieldUINT32ValueForField:1 andValue:(distance) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Calories +- (BOOL)isCaloriesValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCalories { + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCalories:(FITUInt32)calories { + [super setFieldUINT32ValueForField:2 andValue:(calories) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:3 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ElapsedTime +- (BOOL)isElapsedTimeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getElapsedTime { + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setElapsedTime:(FITUInt32)elapsedTime { + [super setFieldUINT32ValueForField:4 andValue:(elapsedTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sessions +- (BOOL)isSessionsValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getSessions { + return ([super getFieldUINT16ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSessions:(FITUInt16)sessions { + [super setFieldUINT16ValueForField:5 andValue:(sessions) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActiveTime +- (BOOL)isActiveTimeValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getActiveTime { + return ([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActiveTime:(FITUInt32)activeTime { + [super setFieldUINT32ValueForField:6 andValue:(activeTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SportIndex +- (BOOL)isSportIndexValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getSportIndex { + return ([super getFieldUINT8ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSportIndex:(FITUInt8)sportIndex { + [super setFieldUINT8ValueForField:9 andValue:(sportIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITTrainingFileMesg.mm b/Sources/ObjcFIT/FITTrainingFileMesg.mm new file mode 100644 index 0000000..3256e70 --- /dev/null +++ b/Sources/ObjcFIT/FITTrainingFileMesg.mm @@ -0,0 +1,183 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITTrainingFileMesg.h" + +@implementation FITTrainingFileMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_TRAINING_FILE]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFile)getType { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITFile)type { + [super setFieldENUMValueForField:0 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Manufacturer +- (BOOL)isManufacturerValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITManufacturer)getManufacturer { + return ([super getFieldUINT16ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setManufacturer:(FITManufacturer)manufacturer { + [super setFieldUINT16ValueForField:1 andValue:(manufacturer) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Product +- (BOOL)isProductValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getProduct { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setProduct:(FITUInt16)product { + [super setFieldUINT16ValueForField:2 andValue:(product) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Product - Sub Fields +// FaveroProduct - Product Field - Sub Field +- (BOOL)isFaveroProductValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITTrainingFileMesgProductFieldFaveroProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITTrainingFileMesgProductFieldFaveroProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFaveroProduct)getFaveroProduct +{ + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FITTrainingFileMesgProductFieldFaveroProductSubField]); +} + +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct +{ + [super setFieldUINT16ValueForField:2 andValue:(faveroProduct) forIndex:0 andSubFieldIndex:FITTrainingFileMesgProductFieldFaveroProductSubField]; +} +// GarminProduct - Product Field - Sub Field +- (BOOL)isGarminProductValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITTrainingFileMesgProductFieldGarminProductSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITTrainingFileMesgProductFieldGarminProductSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGarminProduct)getGarminProduct +{ + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FITTrainingFileMesgProductFieldGarminProductSubField]); +} + +- (void)setGarminProduct:(FITGarminProduct)garminProduct +{ + [super setFieldUINT16ValueForField:2 andValue:(garminProduct) forIndex:0 andSubFieldIndex:FITTrainingFileMesgProductFieldGarminProductSubField]; +} + +// SerialNumber +- (BOOL)isSerialNumberValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32z)getSerialNumber { + return ([super getFieldUINT32ZValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSerialNumber:(FITUInt32z)serialNumber { + [super setFieldUINT32ZValueForField:3 andValue:(serialNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimeCreated +- (BOOL)isTimeCreatedValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimeCreated { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimeCreated:(FITDate *)timeCreated { + [super setFieldUINT32ValueForField:4 andValue:TimestampFromFITDate(timeCreated) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITUserProfileMesg.mm b/Sources/ObjcFIT/FITUserProfileMesg.mm new file mode 100644 index 0000000..0f08d41 --- /dev/null +++ b/Sources/ObjcFIT/FITUserProfileMesg.mm @@ -0,0 +1,553 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITUserProfileMesg.h" + +@implementation FITUserProfileMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_USER_PROFILE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FriendlyName +- (BOOL)isFriendlyNameValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getFriendlyName { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFriendlyName:(NSString *)friendlyName { + [super setFieldSTRINGValueForField:0 andValue:(friendlyName) forIndex:0]; +} + +// Gender +- (BOOL)isGenderValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITGender)getGender { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGender:(FITGender)gender { + [super setFieldENUMValueForField:1 andValue:(gender) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Age +- (BOOL)isAgeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getAge { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setAge:(FITUInt8)age { + [super setFieldUINT8ValueForField:2 andValue:(age) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Height +- (BOOL)isHeightValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getHeight { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeight:(FITFloat32)height { + [super setFieldFLOAT32ValueForField:3 andValue:(height) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Weight +- (BOOL)isWeightValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getWeight { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeight:(FITFloat32)weight { + [super setFieldFLOAT32ValueForField:4 andValue:(weight) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Language +- (BOOL)isLanguageValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLanguage)getLanguage { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLanguage:(FITLanguage)language { + [super setFieldENUMValueForField:5 andValue:(language) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ElevSetting +- (BOOL)isElevSettingValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getElevSetting { + return ([super getFieldENUMValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setElevSetting:(FITDisplayMeasure)elevSetting { + [super setFieldENUMValueForField:6 andValue:(elevSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WeightSetting +- (BOOL)isWeightSettingValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getWeightSetting { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeightSetting:(FITDisplayMeasure)weightSetting { + [super setFieldENUMValueForField:7 andValue:(weightSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RestingHeartRate +- (BOOL)isRestingHeartRateValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getRestingHeartRate { + return ([super getFieldUINT8ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRestingHeartRate:(FITUInt8)restingHeartRate { + [super setFieldUINT8ValueForField:8 andValue:(restingHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DefaultMaxRunningHeartRate +- (BOOL)isDefaultMaxRunningHeartRateValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDefaultMaxRunningHeartRate { + return ([super getFieldUINT8ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDefaultMaxRunningHeartRate:(FITUInt8)defaultMaxRunningHeartRate { + [super setFieldUINT8ValueForField:9 andValue:(defaultMaxRunningHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DefaultMaxBikingHeartRate +- (BOOL)isDefaultMaxBikingHeartRateValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDefaultMaxBikingHeartRate { + return ([super getFieldUINT8ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDefaultMaxBikingHeartRate:(FITUInt8)defaultMaxBikingHeartRate { + [super setFieldUINT8ValueForField:10 andValue:(defaultMaxBikingHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DefaultMaxHeartRate +- (BOOL)isDefaultMaxHeartRateValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getDefaultMaxHeartRate { + return ([super getFieldUINT8ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDefaultMaxHeartRate:(FITUInt8)defaultMaxHeartRate { + [super setFieldUINT8ValueForField:11 andValue:(defaultMaxHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HrSetting +- (BOOL)isHrSettingValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayHeart)getHrSetting { + return ([super getFieldENUMValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHrSetting:(FITDisplayHeart)hrSetting { + [super setFieldENUMValueForField:12 andValue:(hrSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SpeedSetting +- (BOOL)isSpeedSettingValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getSpeedSetting { + return ([super getFieldENUMValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSpeedSetting:(FITDisplayMeasure)speedSetting { + [super setFieldENUMValueForField:13 andValue:(speedSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DistSetting +- (BOOL)isDistSettingValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getDistSetting { + return ([super getFieldENUMValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDistSetting:(FITDisplayMeasure)distSetting { + [super setFieldENUMValueForField:14 andValue:(distSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PowerSetting +- (BOOL)isPowerSettingValid { + const fit::Field* field = [super getField:16]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayPower)getPowerSetting { + return ([super getFieldENUMValueForField:16 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPowerSetting:(FITDisplayPower)powerSetting { + [super setFieldENUMValueForField:16 andValue:(powerSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActivityClass +- (BOOL)isActivityClassValid { + const fit::Field* field = [super getField:17]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITActivityClass)getActivityClass { + return ([super getFieldENUMValueForField:17 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActivityClass:(FITActivityClass)activityClass { + [super setFieldENUMValueForField:17 andValue:(activityClass) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PositionSetting +- (BOOL)isPositionSettingValid { + const fit::Field* field = [super getField:18]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayPosition)getPositionSetting { + return ([super getFieldENUMValueForField:18 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPositionSetting:(FITDisplayPosition)positionSetting { + [super setFieldENUMValueForField:18 andValue:(positionSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TemperatureSetting +- (BOOL)isTemperatureSettingValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getTemperatureSetting { + return ([super getFieldENUMValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTemperatureSetting:(FITDisplayMeasure)temperatureSetting { + [super setFieldENUMValueForField:21 andValue:(temperatureSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LocalId +- (BOOL)isLocalIdValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUserLocalId)getLocalId { + return ([super getFieldUINT16ValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLocalId:(FITUserLocalId)localId { + [super setFieldUINT16ValueForField:22 andValue:(localId) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// GlobalId +- (uint8_t)numGlobalIdValues { + return [super getFieldNumValuesForField:23 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +- (BOOL)isGlobalIdValidforIndex:(uint8_t)index { + const fit::Field* field = [super getField:23]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid(index) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getGlobalIdforIndex:(uint8_t)index { + return ([super getFieldBYTEValueForField:23 forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setGlobalId:(FITByte)globalId forIndex:(uint8_t)index { + [super setFieldBYTEValueForField:23 andValue:(globalId) forIndex:index andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WakeTime +- (BOOL)isWakeTimeValid { + const fit::Field* field = [super getField:28]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocaltimeIntoDay)getWakeTime { + return ([super getFieldUINT32ValueForField:28 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWakeTime:(FITLocaltimeIntoDay)wakeTime { + [super setFieldUINT32ValueForField:28 andValue:(wakeTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SleepTime +- (BOOL)isSleepTimeValid { + const fit::Field* field = [super getField:29]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITLocaltimeIntoDay)getSleepTime { + return ([super getFieldUINT32ValueForField:29 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSleepTime:(FITLocaltimeIntoDay)sleepTime { + [super setFieldUINT32ValueForField:29 andValue:(sleepTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HeightSetting +- (BOOL)isHeightSettingValid { + const fit::Field* field = [super getField:30]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getHeightSetting { + return ([super getFieldENUMValueForField:30 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHeightSetting:(FITDisplayMeasure)heightSetting { + [super setFieldENUMValueForField:30 andValue:(heightSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UserRunningStepLength +- (BOOL)isUserRunningStepLengthValid { + const fit::Field* field = [super getField:31]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getUserRunningStepLength { + return ([super getFieldFLOAT32ValueForField:31 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUserRunningStepLength:(FITFloat32)userRunningStepLength { + [super setFieldFLOAT32ValueForField:31 andValue:(userRunningStepLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UserWalkingStepLength +- (BOOL)isUserWalkingStepLengthValid { + const fit::Field* field = [super getField:32]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getUserWalkingStepLength { + return ([super getFieldFLOAT32ValueForField:32 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUserWalkingStepLength:(FITFloat32)userWalkingStepLength { + [super setFieldFLOAT32ValueForField:32 andValue:(userWalkingStepLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DepthSetting +- (BOOL)isDepthSettingValid { + const fit::Field* field = [super getField:47]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getDepthSetting { + return ([super getFieldENUMValueForField:47 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDepthSetting:(FITDisplayMeasure)depthSetting { + [super setFieldENUMValueForField:47 andValue:(depthSetting) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DiveCount +- (BOOL)isDiveCountValid { + const fit::Field* field = [super getField:49]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDiveCount { + return ([super getFieldUINT32ValueForField:49 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDiveCount:(FITUInt32)diveCount { + [super setFieldUINT32ValueForField:49 andValue:(diveCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITVideoClipMesg.mm b/Sources/ObjcFIT/FITVideoClipMesg.mm new file mode 100644 index 0000000..d753cb7 --- /dev/null +++ b/Sources/ObjcFIT/FITVideoClipMesg.mm @@ -0,0 +1,152 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITVideoClipMesg.h" + +@implementation FITVideoClipMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_VIDEO_CLIP]; + + return self; +} + +// ClipNumber +- (BOOL)isClipNumberValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getClipNumber { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setClipNumber:(FITUInt16)clipNumber { + [super setFieldUINT16ValueForField:0 andValue:(clipNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTimestamp +- (BOOL)isStartTimestampValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getStartTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTimestamp:(FITDate *)startTimestamp { + [super setFieldUINT32ValueForField:1 andValue:TimestampFromFITDate(startTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// StartTimestampMs +- (BOOL)isStartTimestampMsValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getStartTimestampMs { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setStartTimestampMs:(FITUInt16)startTimestampMs { + [super setFieldUINT16ValueForField:2 andValue:(startTimestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndTimestamp +- (BOOL)isEndTimestampValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getEndTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndTimestamp:(FITDate *)endTimestamp { + [super setFieldUINT32ValueForField:3 andValue:TimestampFromFITDate(endTimestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// EndTimestampMs +- (BOOL)isEndTimestampMsValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getEndTimestampMs { + return ([super getFieldUINT16ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEndTimestampMs:(FITUInt16)endTimestampMs { + [super setFieldUINT16ValueForField:4 andValue:(endTimestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ClipStart +- (BOOL)isClipStartValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getClipStart { + return ([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setClipStart:(FITUInt32)clipStart { + [super setFieldUINT32ValueForField:6 andValue:(clipStart) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ClipEnd +- (BOOL)isClipEndValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getClipEnd { + return ([super getFieldUINT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setClipEnd:(FITUInt32)clipEnd { + [super setFieldUINT32ValueForField:7 andValue:(clipEnd) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITVideoDescriptionMesg.mm b/Sources/ObjcFIT/FITVideoDescriptionMesg.mm new file mode 100644 index 0000000..0d6744c --- /dev/null +++ b/Sources/ObjcFIT/FITVideoDescriptionMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITVideoDescriptionMesg.h" + +@implementation FITVideoDescriptionMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_VIDEO_DESCRIPTION]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MessageCount +- (BOOL)isMessageCountValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMessageCount { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageCount:(FITUInt16)messageCount { + [super setFieldUINT16ValueForField:0 andValue:(messageCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Text +- (BOOL)isTextValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getText { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setText:(NSString *)text { + [super setFieldSTRINGValueForField:1 andValue:(text) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITVideoFrameMesg.mm b/Sources/ObjcFIT/FITVideoFrameMesg.mm new file mode 100644 index 0000000..c926322 --- /dev/null +++ b/Sources/ObjcFIT/FITVideoFrameMesg.mm @@ -0,0 +1,80 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITVideoFrameMesg.h" + +@implementation FITVideoFrameMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_VIDEO_FRAME]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TimestampMs +- (BOOL)isTimestampMsValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getTimestampMs { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestampMs:(FITUInt16)timestampMs { + [super setFieldUINT16ValueForField:0 andValue:(timestampMs) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FrameNumber +- (BOOL)isFrameNumberValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getFrameNumber { + return ([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFrameNumber:(FITUInt32)frameNumber { + [super setFieldUINT32ValueForField:1 andValue:(frameNumber) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITVideoMesg.mm b/Sources/ObjcFIT/FITVideoMesg.mm new file mode 100644 index 0000000..7492c71 --- /dev/null +++ b/Sources/ObjcFIT/FITVideoMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITVideoMesg.h" + +@implementation FITVideoMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_VIDEO]; + + return self; +} + +// Url +- (BOOL)isUrlValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getUrl { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUrl:(NSString *)url { + [super setFieldSTRINGValueForField:0 andValue:(url) forIndex:0]; +} + +// HostingProvider +- (BOOL)isHostingProviderValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getHostingProvider { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHostingProvider:(NSString *)hostingProvider { + [super setFieldSTRINGValueForField:1 andValue:(hostingProvider) forIndex:0]; +} + +// Duration +- (BOOL)isDurationValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDuration { + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDuration:(FITUInt32)duration { + [super setFieldUINT32ValueForField:2 andValue:(duration) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITVideoTitleMesg.mm b/Sources/ObjcFIT/FITVideoTitleMesg.mm new file mode 100644 index 0000000..7381833 --- /dev/null +++ b/Sources/ObjcFIT/FITVideoTitleMesg.mm @@ -0,0 +1,81 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITVideoTitleMesg.h" + +@implementation FITVideoTitleMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_VIDEO_TITLE]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MessageCount +- (BOOL)isMessageCountValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getMessageCount { + return ([super getFieldUINT16ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageCount:(FITUInt16)messageCount { + [super setFieldUINT16ValueForField:0 andValue:(messageCount) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Text +- (BOOL)isTextValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getText { + return ([super getFieldSTRINGValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setText:(NSString *)text { + [super setFieldSTRINGValueForField:1 andValue:(text) forIndex:0]; +} + +@end diff --git a/Sources/ObjcFIT/FITWatchfaceSettingsMesg.mm b/Sources/ObjcFIT/FITWatchfaceSettingsMesg.mm new file mode 100644 index 0000000..e9e743d --- /dev/null +++ b/Sources/ObjcFIT/FITWatchfaceSettingsMesg.mm @@ -0,0 +1,129 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITWatchfaceSettingsMesg.h" + +@implementation FITWatchfaceSettingsMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_WATCHFACE_SETTINGS]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Mode +- (BOOL)isModeValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWatchfaceMode)getMode { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMode:(FITWatchfaceMode)mode { + [super setFieldENUMValueForField:0 andValue:(mode) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Layout +- (BOOL)isLayoutValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITByte)getLayout { + return ([super getFieldBYTEValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLayout:(FITByte)layout { + [super setFieldBYTEValueForField:1 andValue:(layout) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// Layout - Sub Fields +// DigitalLayout - Layout Field - Sub Field +- (BOOL)isDigitalLayoutValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITWatchfaceSettingsMesgLayoutFieldDigitalLayoutSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWatchfaceSettingsMesgLayoutFieldDigitalLayoutSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDigitalWatchfaceLayout)getDigitalLayout +{ + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FITWatchfaceSettingsMesgLayoutFieldDigitalLayoutSubField]); +} + +- (void)setDigitalLayout:(FITDigitalWatchfaceLayout)digitalLayout +{ + [super setFieldENUMValueForField:1 andValue:(digitalLayout) forIndex:0 andSubFieldIndex:FITWatchfaceSettingsMesgLayoutFieldDigitalLayoutSubField]; +} +// AnalogLayout - Layout Field - Sub Field +- (BOOL)isAnalogLayoutValid +{ + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:1 supportSubField:(FITUInt16)FITWatchfaceSettingsMesgLayoutFieldAnalogLayoutSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWatchfaceSettingsMesgLayoutFieldAnalogLayoutSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITAnalogWatchfaceLayout)getAnalogLayout +{ + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FITWatchfaceSettingsMesgLayoutFieldAnalogLayoutSubField]); +} + +- (void)setAnalogLayout:(FITAnalogWatchfaceLayout)analogLayout +{ + [super setFieldENUMValueForField:1 andValue:(analogLayout) forIndex:0 andSubFieldIndex:FITWatchfaceSettingsMesgLayoutFieldAnalogLayoutSubField]; +} + +@end diff --git a/Sources/ObjcFIT/FITWeatherAlertMesg.mm b/Sources/ObjcFIT/FITWeatherAlertMesg.mm new file mode 100644 index 0000000..648b7a4 --- /dev/null +++ b/Sources/ObjcFIT/FITWeatherAlertMesg.mm @@ -0,0 +1,135 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITWeatherAlertMesg.h" + +@implementation FITWeatherAlertMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_WEATHER_ALERT]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ReportId +- (BOOL)isReportIdValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getReportId { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setReportId:(NSString *)reportId { + [super setFieldSTRINGValueForField:0 andValue:(reportId) forIndex:0]; +} + +// IssueTime +- (BOOL)isIssueTimeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getIssueTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setIssueTime:(FITDate *)issueTime { + [super setFieldUINT32ValueForField:1 andValue:TimestampFromFITDate(issueTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ExpireTime +- (BOOL)isExpireTimeValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getExpireTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setExpireTime:(FITDate *)expireTime { + [super setFieldUINT32ValueForField:2 andValue:TimestampFromFITDate(expireTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Severity +- (BOOL)isSeverityValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWeatherSeverity)getSeverity { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSeverity:(FITWeatherSeverity)severity { + [super setFieldENUMValueForField:3 andValue:(severity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Type +- (BOOL)isTypeValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWeatherSevereType)getType { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setType:(FITWeatherSevereType)type { + [super setFieldENUMValueForField:4 andValue:(type) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITWeatherConditionsMesg.mm b/Sources/ObjcFIT/FITWeatherConditionsMesg.mm new file mode 100644 index 0000000..634cd9f --- /dev/null +++ b/Sources/ObjcFIT/FITWeatherConditionsMesg.mm @@ -0,0 +1,315 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITWeatherConditionsMesg.h" + +@implementation FITWeatherConditionsMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_WEATHER_CONDITIONS]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WeatherReport +- (BOOL)isWeatherReportValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWeatherReport)getWeatherReport { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeatherReport:(FITWeatherReport)weatherReport { + [super setFieldENUMValueForField:0 andValue:(weatherReport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Temperature +- (BOOL)isTemperatureValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getTemperature { + return ([super getFieldSINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTemperature:(FITSInt8)temperature { + [super setFieldSINT8ValueForField:1 andValue:(temperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Condition +- (BOOL)isConditionValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWeatherStatus)getCondition { + return ([super getFieldENUMValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCondition:(FITWeatherStatus)condition { + [super setFieldENUMValueForField:2 andValue:(condition) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WindDirection +- (BOOL)isWindDirectionValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getWindDirection { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWindDirection:(FITUInt16)windDirection { + [super setFieldUINT16ValueForField:3 andValue:(windDirection) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WindSpeed +- (BOOL)isWindSpeedValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getWindSpeed { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWindSpeed:(FITFloat32)windSpeed { + [super setFieldFLOAT32ValueForField:4 andValue:(windSpeed) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PrecipitationProbability +- (BOOL)isPrecipitationProbabilityValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getPrecipitationProbability { + return ([super getFieldUINT8ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPrecipitationProbability:(FITUInt8)precipitationProbability { + [super setFieldUINT8ValueForField:5 andValue:(precipitationProbability) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TemperatureFeelsLike +- (BOOL)isTemperatureFeelsLikeValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getTemperatureFeelsLike { + return ([super getFieldSINT8ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTemperatureFeelsLike:(FITSInt8)temperatureFeelsLike { + [super setFieldSINT8ValueForField:6 andValue:(temperatureFeelsLike) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// RelativeHumidity +- (BOOL)isRelativeHumidityValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getRelativeHumidity { + return ([super getFieldUINT8ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setRelativeHumidity:(FITUInt8)relativeHumidity { + [super setFieldUINT8ValueForField:7 andValue:(relativeHumidity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Location +- (BOOL)isLocationValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getLocation { + return ([super getFieldSTRINGValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLocation:(NSString *)location { + [super setFieldSTRINGValueForField:8 andValue:(location) forIndex:0]; +} + +// ObservedAtTime +- (BOOL)isObservedAtTimeValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getObservedAtTime { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setObservedAtTime:(FITDate *)observedAtTime { + [super setFieldUINT32ValueForField:9 andValue:TimestampFromFITDate(observedAtTime) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ObservedLocationLat +- (BOOL)isObservedLocationLatValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getObservedLocationLat { + return ([super getFieldSINT32ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setObservedLocationLat:(FITSInt32)observedLocationLat { + [super setFieldSINT32ValueForField:10 andValue:(observedLocationLat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ObservedLocationLong +- (BOOL)isObservedLocationLongValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt32)getObservedLocationLong { + return ([super getFieldSINT32ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setObservedLocationLong:(FITSInt32)observedLocationLong { + [super setFieldSINT32ValueForField:11 andValue:(observedLocationLong) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DayOfWeek +- (BOOL)isDayOfWeekValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDayOfWeek)getDayOfWeek { + return ([super getFieldENUMValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDayOfWeek:(FITDayOfWeek)dayOfWeek { + [super setFieldENUMValueForField:12 andValue:(dayOfWeek) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HighTemperature +- (BOOL)isHighTemperatureValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getHighTemperature { + return ([super getFieldSINT8ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHighTemperature:(FITSInt8)highTemperature { + [super setFieldSINT8ValueForField:13 andValue:(highTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// LowTemperature +- (BOOL)isLowTemperatureValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSInt8)getLowTemperature { + return ([super getFieldSINT8ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setLowTemperature:(FITSInt8)lowTemperature { + [super setFieldSINT8ValueForField:14 andValue:(lowTemperature) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITWeightScaleMesg.mm b/Sources/ObjcFIT/FITWeightScaleMesg.mm new file mode 100644 index 0000000..3af565f --- /dev/null +++ b/Sources/ObjcFIT/FITWeightScaleMesg.mm @@ -0,0 +1,260 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITWeightScaleMesg.h" + +@implementation FITWeightScaleMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_WEIGHT_SCALE]; + + return self; +} + +// Timestamp +- (BOOL)isTimestampValid { + const fit::Field* field = [super getField:253]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDate *)getTimestamp { + return FITDateFromTimestamp([super getFieldUINT32ValueForField:253 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTimestamp:(FITDate *)timestamp { + [super setFieldUINT32ValueForField:253 andValue:TimestampFromFITDate(timestamp) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Weight +- (BOOL)isWeightValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getWeight { + return ([super getFieldFLOAT32ValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeight:(FITFloat32)weight { + [super setFieldFLOAT32ValueForField:0 andValue:(weight) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PercentFat +- (BOOL)isPercentFatValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPercentFat { + return ([super getFieldFLOAT32ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPercentFat:(FITFloat32)percentFat { + [super setFieldFLOAT32ValueForField:1 andValue:(percentFat) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PercentHydration +- (BOOL)isPercentHydrationValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPercentHydration { + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPercentHydration:(FITFloat32)percentHydration { + [super setFieldFLOAT32ValueForField:2 andValue:(percentHydration) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// VisceralFatMass +- (BOOL)isVisceralFatMassValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getVisceralFatMass { + return ([super getFieldFLOAT32ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVisceralFatMass:(FITFloat32)visceralFatMass { + [super setFieldFLOAT32ValueForField:3 andValue:(visceralFatMass) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BoneMass +- (BOOL)isBoneMassValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBoneMass { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBoneMass:(FITFloat32)boneMass { + [super setFieldFLOAT32ValueForField:4 andValue:(boneMass) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MuscleMass +- (BOOL)isMuscleMassValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getMuscleMass { + return ([super getFieldFLOAT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMuscleMass:(FITFloat32)muscleMass { + [super setFieldFLOAT32ValueForField:5 andValue:(muscleMass) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// BasalMet +- (BOOL)isBasalMetValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getBasalMet { + return ([super getFieldFLOAT32ValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setBasalMet:(FITFloat32)basalMet { + [super setFieldFLOAT32ValueForField:7 andValue:(basalMet) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PhysiqueRating +- (BOOL)isPhysiqueRatingValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getPhysiqueRating { + return ([super getFieldUINT8ValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPhysiqueRating:(FITUInt8)physiqueRating { + [super setFieldUINT8ValueForField:8 andValue:(physiqueRating) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ActiveMet +- (BOOL)isActiveMetValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getActiveMet { + return ([super getFieldFLOAT32ValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setActiveMet:(FITFloat32)activeMet { + [super setFieldFLOAT32ValueForField:9 andValue:(activeMet) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// MetabolicAge +- (BOOL)isMetabolicAgeValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMetabolicAge { + return ([super getFieldUINT8ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMetabolicAge:(FITUInt8)metabolicAge { + [super setFieldUINT8ValueForField:10 andValue:(metabolicAge) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// VisceralFatRating +- (BOOL)isVisceralFatRatingValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getVisceralFatRating { + return ([super getFieldUINT8ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setVisceralFatRating:(FITUInt8)visceralFatRating { + [super setFieldUINT8ValueForField:11 andValue:(visceralFatRating) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// UserProfileIndex +- (BOOL)isUserProfileIndexValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getUserProfileIndex { + return ([super getFieldUINT16ValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setUserProfileIndex:(FITMessageIndex)userProfileIndex { + [super setFieldUINT16ValueForField:12 andValue:(userProfileIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITWorkoutMesg.mm b/Sources/ObjcFIT/FITWorkoutMesg.mm new file mode 100644 index 0000000..9e1eaa3 --- /dev/null +++ b/Sources/ObjcFIT/FITWorkoutMesg.mm @@ -0,0 +1,153 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITWorkoutMesg.h" + +@implementation FITWorkoutMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_WORKOUT]; + + return self; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:4 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Capabilities +- (BOOL)isCapabilitiesValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutCapabilities)getCapabilities { + return ([super getFieldUINT32ZValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCapabilities:(FITWorkoutCapabilities)capabilities { + [super setFieldUINT32ZValueForField:5 andValue:(capabilities) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumValidSteps +- (BOOL)isNumValidStepsValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumValidSteps { + return ([super getFieldUINT16ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumValidSteps:(FITUInt16)numValidSteps { + [super setFieldUINT16ValueForField:6 andValue:(numValidSteps) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WktName +- (BOOL)isWktNameValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getWktName { + return ([super getFieldSTRINGValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWktName:(NSString *)wktName { + [super setFieldSTRINGValueForField:8 andValue:(wktName) forIndex:0]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:11 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PoolLength +- (BOOL)isPoolLengthValid { + const fit::Field* field = [super getField:14]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPoolLength { + return ([super getFieldFLOAT32ValueForField:14 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPoolLength:(FITFloat32)poolLength { + [super setFieldFLOAT32ValueForField:14 andValue:(poolLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PoolLengthUnit +- (BOOL)isPoolLengthUnitValid { + const fit::Field* field = [super getField:15]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getPoolLengthUnit { + return ([super getFieldENUMValueForField:15 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPoolLengthUnit:(FITDisplayMeasure)poolLengthUnit { + [super setFieldENUMValueForField:15 andValue:(poolLengthUnit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITWorkoutSessionMesg.mm b/Sources/ObjcFIT/FITWorkoutSessionMesg.mm new file mode 100644 index 0000000..f561fbf --- /dev/null +++ b/Sources/ObjcFIT/FITWorkoutSessionMesg.mm @@ -0,0 +1,152 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITWorkoutSessionMesg.h" + +@implementation FITWorkoutSessionMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_WORKOUT_SESSION]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Sport +- (BOOL)isSportValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSport)getSport { + return ([super getFieldENUMValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSport:(FITSport)sport { + [super setFieldENUMValueForField:0 andValue:(sport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SubSport +- (BOOL)isSubSportValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSubSport)getSubSport { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSubSport:(FITSubSport)subSport { + [super setFieldENUMValueForField:1 andValue:(subSport) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// NumValidSteps +- (BOOL)isNumValidStepsValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getNumValidSteps { + return ([super getFieldUINT16ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNumValidSteps:(FITUInt16)numValidSteps { + [super setFieldUINT16ValueForField:2 andValue:(numValidSteps) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FirstStepIndex +- (BOOL)isFirstStepIndexValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getFirstStepIndex { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFirstStepIndex:(FITUInt16)firstStepIndex { + [super setFieldUINT16ValueForField:3 andValue:(firstStepIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PoolLength +- (BOOL)isPoolLengthValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getPoolLength { + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPoolLength:(FITFloat32)poolLength { + [super setFieldFLOAT32ValueForField:4 andValue:(poolLength) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PoolLengthUnit +- (BOOL)isPoolLengthUnitValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITDisplayMeasure)getPoolLengthUnit { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPoolLengthUnit:(FITDisplayMeasure)poolLengthUnit { + [super setFieldENUMValueForField:5 andValue:(poolLengthUnit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/FITWorkoutStepMesg.mm b/Sources/ObjcFIT/FITWorkoutStepMesg.mm new file mode 100644 index 0000000..5d83a8a --- /dev/null +++ b/Sources/ObjcFIT/FITWorkoutStepMesg.mm @@ -0,0 +1,1312 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + +#import "FITString.h" + +#import "FITWorkoutStepMesg.h" + +@implementation FITWorkoutStepMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_WORKOUT_STEP]; + + return self; +} + +// MessageIndex +- (BOOL)isMessageIndexValid { + const fit::Field* field = [super getField:254]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITMessageIndex)getMessageIndex { + return ([super getFieldUINT16ValueForField:254 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMessageIndex:(FITMessageIndex)messageIndex { + [super setFieldUINT16ValueForField:254 andValue:(messageIndex) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WktStepName +- (BOOL)isWktStepNameValid { + const fit::Field* field = [super getField:0]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getWktStepName { + return ([super getFieldSTRINGValueForField:0 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWktStepName:(NSString *)wktStepName { + [super setFieldSTRINGValueForField:0 andValue:(wktStepName) forIndex:0]; +} + +// DurationType +- (BOOL)isDurationTypeValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWktStepDuration)getDurationType { + return ([super getFieldENUMValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDurationType:(FITWktStepDuration)durationType { + [super setFieldENUMValueForField:1 andValue:(durationType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// DurationValue +- (BOOL)isDurationValueValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDurationValue { + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setDurationValue:(FITUInt32)durationValue { + [super setFieldUINT32ValueForField:2 andValue:(durationValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// DurationValue - Sub Fields +// DurationTime - DurationValue Field - Sub Field +- (BOOL)isDurationTimeValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITWorkoutStepMesgDurationValueFieldDurationTimeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgDurationValueFieldDurationTimeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDurationTime +{ + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationTimeSubField]); +} + +- (void)setDurationTime:(FITFloat32)durationTime +{ + [super setFieldFLOAT32ValueForField:2 andValue:(durationTime) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationTimeSubField]; +} +// DurationDistance - DurationValue Field - Sub Field +- (BOOL)isDurationDistanceValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITWorkoutStepMesgDurationValueFieldDurationDistanceSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgDurationValueFieldDurationDistanceSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getDurationDistance +{ + return ([super getFieldFLOAT32ValueForField:2 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationDistanceSubField]); +} + +- (void)setDurationDistance:(FITFloat32)durationDistance +{ + [super setFieldFLOAT32ValueForField:2 andValue:(durationDistance) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationDistanceSubField]; +} +// DurationHr - DurationValue Field - Sub Field +- (BOOL)isDurationHrValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITWorkoutStepMesgDurationValueFieldDurationHrSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgDurationValueFieldDurationHrSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutHr)getDurationHr +{ + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationHrSubField]); +} + +- (void)setDurationHr:(FITWorkoutHr)durationHr +{ + [super setFieldUINT32ValueForField:2 andValue:(durationHr) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationHrSubField]; +} +// DurationCalories - DurationValue Field - Sub Field +- (BOOL)isDurationCaloriesValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITWorkoutStepMesgDurationValueFieldDurationCaloriesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgDurationValueFieldDurationCaloriesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDurationCalories +{ + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationCaloriesSubField]); +} + +- (void)setDurationCalories:(FITUInt32)durationCalories +{ + [super setFieldUINT32ValueForField:2 andValue:(durationCalories) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationCaloriesSubField]; +} +// DurationStep - DurationValue Field - Sub Field +- (BOOL)isDurationStepValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITWorkoutStepMesgDurationValueFieldDurationStepSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgDurationValueFieldDurationStepSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDurationStep +{ + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationStepSubField]); +} + +- (void)setDurationStep:(FITUInt32)durationStep +{ + [super setFieldUINT32ValueForField:2 andValue:(durationStep) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationStepSubField]; +} +// DurationPower - DurationValue Field - Sub Field +- (BOOL)isDurationPowerValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITWorkoutStepMesgDurationValueFieldDurationPowerSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgDurationValueFieldDurationPowerSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutPower)getDurationPower +{ + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationPowerSubField]); +} + +- (void)setDurationPower:(FITWorkoutPower)durationPower +{ + [super setFieldUINT32ValueForField:2 andValue:(durationPower) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationPowerSubField]; +} +// DurationReps - DurationValue Field - Sub Field +- (BOOL)isDurationRepsValid +{ + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:2 supportSubField:(FITUInt16)FITWorkoutStepMesgDurationValueFieldDurationRepsSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgDurationValueFieldDurationRepsSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getDurationReps +{ + return ([super getFieldUINT32ValueForField:2 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationRepsSubField]); +} + +- (void)setDurationReps:(FITUInt32)durationReps +{ + [super setFieldUINT32ValueForField:2 andValue:(durationReps) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgDurationValueFieldDurationRepsSubField]; +} + +// TargetType +- (BOOL)isTargetTypeValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWktStepTarget)getTargetType { + return ([super getFieldENUMValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTargetType:(FITWktStepTarget)targetType { + [super setFieldENUMValueForField:3 andValue:(targetType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// TargetValue +- (BOOL)isTargetValueValid { + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTargetValue { + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setTargetValue:(FITUInt32)targetValue { + [super setFieldUINT32ValueForField:4 andValue:(targetValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// TargetValue - Sub Fields +// TargetSpeedZone - TargetValue Field - Sub Field +- (BOOL)isTargetSpeedZoneValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldTargetSpeedZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldTargetSpeedZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTargetSpeedZone +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetSpeedZoneSubField]); +} + +- (void)setTargetSpeedZone:(FITUInt32)targetSpeedZone +{ + [super setFieldUINT32ValueForField:4 andValue:(targetSpeedZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetSpeedZoneSubField]; +} +// TargetHrZone - TargetValue Field - Sub Field +- (BOOL)isTargetHrZoneValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldTargetHrZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldTargetHrZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTargetHrZone +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetHrZoneSubField]); +} + +- (void)setTargetHrZone:(FITUInt32)targetHrZone +{ + [super setFieldUINT32ValueForField:4 andValue:(targetHrZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetHrZoneSubField]; +} +// TargetCadenceZone - TargetValue Field - Sub Field +- (BOOL)isTargetCadenceZoneValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldTargetCadenceZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldTargetCadenceZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTargetCadenceZone +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetCadenceZoneSubField]); +} + +- (void)setTargetCadenceZone:(FITUInt32)targetCadenceZone +{ + [super setFieldUINT32ValueForField:4 andValue:(targetCadenceZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetCadenceZoneSubField]; +} +// TargetPowerZone - TargetValue Field - Sub Field +- (BOOL)isTargetPowerZoneValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldTargetPowerZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldTargetPowerZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getTargetPowerZone +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetPowerZoneSubField]); +} + +- (void)setTargetPowerZone:(FITUInt32)targetPowerZone +{ + [super setFieldUINT32ValueForField:4 andValue:(targetPowerZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetPowerZoneSubField]; +} +// RepeatSteps - TargetValue Field - Sub Field +- (BOOL)isRepeatStepsValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldRepeatStepsSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldRepeatStepsSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getRepeatSteps +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatStepsSubField]); +} + +- (void)setRepeatSteps:(FITUInt32)repeatSteps +{ + [super setFieldUINT32ValueForField:4 andValue:(repeatSteps) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatStepsSubField]; +} +// RepeatTime - TargetValue Field - Sub Field +- (BOOL)isRepeatTimeValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldRepeatTimeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldRepeatTimeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRepeatTime +{ + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatTimeSubField]); +} + +- (void)setRepeatTime:(FITFloat32)repeatTime +{ + [super setFieldFLOAT32ValueForField:4 andValue:(repeatTime) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatTimeSubField]; +} +// RepeatDistance - TargetValue Field - Sub Field +- (BOOL)isRepeatDistanceValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldRepeatDistanceSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldRepeatDistanceSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getRepeatDistance +{ + return ([super getFieldFLOAT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatDistanceSubField]); +} + +- (void)setRepeatDistance:(FITFloat32)repeatDistance +{ + [super setFieldFLOAT32ValueForField:4 andValue:(repeatDistance) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatDistanceSubField]; +} +// RepeatCalories - TargetValue Field - Sub Field +- (BOOL)isRepeatCaloriesValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldRepeatCaloriesSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldRepeatCaloriesSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getRepeatCalories +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatCaloriesSubField]); +} + +- (void)setRepeatCalories:(FITUInt32)repeatCalories +{ + [super setFieldUINT32ValueForField:4 andValue:(repeatCalories) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatCaloriesSubField]; +} +// RepeatHr - TargetValue Field - Sub Field +- (BOOL)isRepeatHrValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldRepeatHrSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldRepeatHrSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutHr)getRepeatHr +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatHrSubField]); +} + +- (void)setRepeatHr:(FITWorkoutHr)repeatHr +{ + [super setFieldUINT32ValueForField:4 andValue:(repeatHr) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatHrSubField]; +} +// RepeatPower - TargetValue Field - Sub Field +- (BOOL)isRepeatPowerValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldRepeatPowerSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldRepeatPowerSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutPower)getRepeatPower +{ + return ([super getFieldUINT32ValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatPowerSubField]); +} + +- (void)setRepeatPower:(FITWorkoutPower)repeatPower +{ + [super setFieldUINT32ValueForField:4 andValue:(repeatPower) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldRepeatPowerSubField]; +} +// TargetStrokeType - TargetValue Field - Sub Field +- (BOOL)isTargetStrokeTypeValid +{ + const fit::Field* field = [super getField:4]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:4 supportSubField:(FITUInt16)FITWorkoutStepMesgTargetValueFieldTargetStrokeTypeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgTargetValueFieldTargetStrokeTypeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSwimStroke)getTargetStrokeType +{ + return ([super getFieldENUMValueForField:4 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetStrokeTypeSubField]); +} + +- (void)setTargetStrokeType:(FITSwimStroke)targetStrokeType +{ + [super setFieldENUMValueForField:4 andValue:(targetStrokeType) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgTargetValueFieldTargetStrokeTypeSubField]; +} + +// CustomTargetValueLow +- (BOOL)isCustomTargetValueLowValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCustomTargetValueLow { + return ([super getFieldUINT32ValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCustomTargetValueLow:(FITUInt32)customTargetValueLow { + [super setFieldUINT32ValueForField:5 andValue:(customTargetValueLow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// CustomTargetValueLow - Sub Fields +// CustomTargetSpeedLow - CustomTargetValueLow Field - Sub Field +- (BOOL)isCustomTargetSpeedLowValid +{ + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:5 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetSpeedLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetSpeedLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCustomTargetSpeedLow +{ + return ([super getFieldFLOAT32ValueForField:5 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetSpeedLowSubField]); +} + +- (void)setCustomTargetSpeedLow:(FITFloat32)customTargetSpeedLow +{ + [super setFieldFLOAT32ValueForField:5 andValue:(customTargetSpeedLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetSpeedLowSubField]; +} +// CustomTargetHeartRateLow - CustomTargetValueLow Field - Sub Field +- (BOOL)isCustomTargetHeartRateLowValid +{ + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:5 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetHeartRateLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetHeartRateLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutHr)getCustomTargetHeartRateLow +{ + return ([super getFieldUINT32ValueForField:5 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetHeartRateLowSubField]); +} + +- (void)setCustomTargetHeartRateLow:(FITWorkoutHr)customTargetHeartRateLow +{ + [super setFieldUINT32ValueForField:5 andValue:(customTargetHeartRateLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetHeartRateLowSubField]; +} +// CustomTargetCadenceLow - CustomTargetValueLow Field - Sub Field +- (BOOL)isCustomTargetCadenceLowValid +{ + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:5 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetCadenceLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetCadenceLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCustomTargetCadenceLow +{ + return ([super getFieldUINT32ValueForField:5 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetCadenceLowSubField]); +} + +- (void)setCustomTargetCadenceLow:(FITUInt32)customTargetCadenceLow +{ + [super setFieldUINT32ValueForField:5 andValue:(customTargetCadenceLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetCadenceLowSubField]; +} +// CustomTargetPowerLow - CustomTargetValueLow Field - Sub Field +- (BOOL)isCustomTargetPowerLowValid +{ + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:5 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetPowerLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetPowerLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutPower)getCustomTargetPowerLow +{ + return ([super getFieldUINT32ValueForField:5 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetPowerLowSubField]); +} + +- (void)setCustomTargetPowerLow:(FITWorkoutPower)customTargetPowerLow +{ + [super setFieldUINT32ValueForField:5 andValue:(customTargetPowerLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetPowerLowSubField]; +} + +// CustomTargetValueHigh +- (BOOL)isCustomTargetValueHighValid { + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCustomTargetValueHigh { + return ([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setCustomTargetValueHigh:(FITUInt32)customTargetValueHigh { + [super setFieldUINT32ValueForField:6 andValue:(customTargetValueHigh) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// CustomTargetValueHigh - Sub Fields +// CustomTargetSpeedHigh - CustomTargetValueHigh Field - Sub Field +- (BOOL)isCustomTargetSpeedHighValid +{ + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:6 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetSpeedHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetSpeedHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getCustomTargetSpeedHigh +{ + return ([super getFieldFLOAT32ValueForField:6 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetSpeedHighSubField]); +} + +- (void)setCustomTargetSpeedHigh:(FITFloat32)customTargetSpeedHigh +{ + [super setFieldFLOAT32ValueForField:6 andValue:(customTargetSpeedHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetSpeedHighSubField]; +} +// CustomTargetHeartRateHigh - CustomTargetValueHigh Field - Sub Field +- (BOOL)isCustomTargetHeartRateHighValid +{ + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:6 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetHeartRateHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetHeartRateHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutHr)getCustomTargetHeartRateHigh +{ + return ([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetHeartRateHighSubField]); +} + +- (void)setCustomTargetHeartRateHigh:(FITWorkoutHr)customTargetHeartRateHigh +{ + [super setFieldUINT32ValueForField:6 andValue:(customTargetHeartRateHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetHeartRateHighSubField]; +} +// CustomTargetCadenceHigh - CustomTargetValueHigh Field - Sub Field +- (BOOL)isCustomTargetCadenceHighValid +{ + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:6 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetCadenceHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetCadenceHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getCustomTargetCadenceHigh +{ + return ([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetCadenceHighSubField]); +} + +- (void)setCustomTargetCadenceHigh:(FITUInt32)customTargetCadenceHigh +{ + [super setFieldUINT32ValueForField:6 andValue:(customTargetCadenceHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetCadenceHighSubField]; +} +// CustomTargetPowerHigh - CustomTargetValueHigh Field - Sub Field +- (BOOL)isCustomTargetPowerHighValid +{ + const fit::Field* field = [super getField:6]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:6 supportSubField:(FITUInt16)FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetPowerHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetPowerHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutPower)getCustomTargetPowerHigh +{ + return ([super getFieldUINT32ValueForField:6 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetPowerHighSubField]); +} + +- (void)setCustomTargetPowerHigh:(FITWorkoutPower)customTargetPowerHigh +{ + [super setFieldUINT32ValueForField:6 andValue:(customTargetPowerHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetPowerHighSubField]; +} + +// Intensity +- (BOOL)isIntensityValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITIntensity)getIntensity { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setIntensity:(FITIntensity)intensity { + [super setFieldENUMValueForField:7 andValue:(intensity) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// Notes +- (BOOL)isNotesValid { + const fit::Field* field = [super getField:8]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (NSString *)getNotes { + return ([super getFieldSTRINGValueForField:8 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setNotes:(NSString *)notes { + [super setFieldSTRINGValueForField:8 andValue:(notes) forIndex:0]; +} + +// Equipment +- (BOOL)isEquipmentValid { + const fit::Field* field = [super getField:9]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutEquipment)getEquipment { + return ([super getFieldENUMValueForField:9 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setEquipment:(FITWorkoutEquipment)equipment { + [super setFieldENUMValueForField:9 andValue:(equipment) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ExerciseCategory +- (BOOL)isExerciseCategoryValid { + const fit::Field* field = [super getField:10]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITExerciseCategory)getExerciseCategory { + return ([super getFieldUINT16ValueForField:10 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setExerciseCategory:(FITExerciseCategory)exerciseCategory { + [super setFieldUINT16ValueForField:10 andValue:(exerciseCategory) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ExerciseName +- (BOOL)isExerciseNameValid { + const fit::Field* field = [super getField:11]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getExerciseName { + return ([super getFieldUINT16ValueForField:11 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setExerciseName:(FITUInt16)exerciseName { + [super setFieldUINT16ValueForField:11 andValue:(exerciseName) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ExerciseWeight +- (BOOL)isExerciseWeightValid { + const fit::Field* field = [super getField:12]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getExerciseWeight { + return ([super getFieldFLOAT32ValueForField:12 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setExerciseWeight:(FITFloat32)exerciseWeight { + [super setFieldFLOAT32ValueForField:12 andValue:(exerciseWeight) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// WeightDisplayUnit +- (BOOL)isWeightDisplayUnitValid { + const fit::Field* field = [super getField:13]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFitBaseUnit)getWeightDisplayUnit { + return ([super getFieldUINT16ValueForField:13 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setWeightDisplayUnit:(FITFitBaseUnit)weightDisplayUnit { + [super setFieldUINT16ValueForField:13 andValue:(weightDisplayUnit) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SecondaryTargetType +- (BOOL)isSecondaryTargetTypeValid { + const fit::Field* field = [super getField:19]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWktStepTarget)getSecondaryTargetType { + return ([super getFieldENUMValueForField:19 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSecondaryTargetType:(FITWktStepTarget)secondaryTargetType { + [super setFieldENUMValueForField:19 andValue:(secondaryTargetType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// SecondaryTargetValue +- (BOOL)isSecondaryTargetValueValid { + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryTargetValue { + return ([super getFieldUINT32ValueForField:20 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSecondaryTargetValue:(FITUInt32)secondaryTargetValue { + [super setFieldUINT32ValueForField:20 andValue:(secondaryTargetValue) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// SecondaryTargetValue - Sub Fields +// SecondaryTargetSpeedZone - SecondaryTargetValue Field - Sub Field +- (BOOL)isSecondaryTargetSpeedZoneValid +{ + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:20 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetSpeedZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetSpeedZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryTargetSpeedZone +{ + return ([super getFieldUINT32ValueForField:20 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetSpeedZoneSubField]); +} + +- (void)setSecondaryTargetSpeedZone:(FITUInt32)secondaryTargetSpeedZone +{ + [super setFieldUINT32ValueForField:20 andValue:(secondaryTargetSpeedZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetSpeedZoneSubField]; +} +// SecondaryTargetHrZone - SecondaryTargetValue Field - Sub Field +- (BOOL)isSecondaryTargetHrZoneValid +{ + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:20 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetHrZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetHrZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryTargetHrZone +{ + return ([super getFieldUINT32ValueForField:20 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetHrZoneSubField]); +} + +- (void)setSecondaryTargetHrZone:(FITUInt32)secondaryTargetHrZone +{ + [super setFieldUINT32ValueForField:20 andValue:(secondaryTargetHrZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetHrZoneSubField]; +} +// SecondaryTargetCadenceZone - SecondaryTargetValue Field - Sub Field +- (BOOL)isSecondaryTargetCadenceZoneValid +{ + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:20 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetCadenceZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetCadenceZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryTargetCadenceZone +{ + return ([super getFieldUINT32ValueForField:20 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetCadenceZoneSubField]); +} + +- (void)setSecondaryTargetCadenceZone:(FITUInt32)secondaryTargetCadenceZone +{ + [super setFieldUINT32ValueForField:20 andValue:(secondaryTargetCadenceZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetCadenceZoneSubField]; +} +// SecondaryTargetPowerZone - SecondaryTargetValue Field - Sub Field +- (BOOL)isSecondaryTargetPowerZoneValid +{ + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:20 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetPowerZoneSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetPowerZoneSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryTargetPowerZone +{ + return ([super getFieldUINT32ValueForField:20 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetPowerZoneSubField]); +} + +- (void)setSecondaryTargetPowerZone:(FITUInt32)secondaryTargetPowerZone +{ + [super setFieldUINT32ValueForField:20 andValue:(secondaryTargetPowerZone) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetPowerZoneSubField]; +} +// SecondaryTargetStrokeType - SecondaryTargetValue Field - Sub Field +- (BOOL)isSecondaryTargetStrokeTypeValid +{ + const fit::Field* field = [super getField:20]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:20 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetStrokeTypeSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetStrokeTypeSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITSwimStroke)getSecondaryTargetStrokeType +{ + return ([super getFieldENUMValueForField:20 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetStrokeTypeSubField]); +} + +- (void)setSecondaryTargetStrokeType:(FITSwimStroke)secondaryTargetStrokeType +{ + [super setFieldENUMValueForField:20 andValue:(secondaryTargetStrokeType) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetStrokeTypeSubField]; +} + +// SecondaryCustomTargetValueLow +- (BOOL)isSecondaryCustomTargetValueLowValid { + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryCustomTargetValueLow { + return ([super getFieldUINT32ValueForField:21 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSecondaryCustomTargetValueLow:(FITUInt32)secondaryCustomTargetValueLow { + [super setFieldUINT32ValueForField:21 andValue:(secondaryCustomTargetValueLow) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// SecondaryCustomTargetValueLow - Sub Fields +// SecondaryCustomTargetSpeedLow - SecondaryCustomTargetValueLow Field - Sub Field +- (BOOL)isSecondaryCustomTargetSpeedLowValid +{ + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:21 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetSpeedLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetSpeedLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSecondaryCustomTargetSpeedLow +{ + return ([super getFieldFLOAT32ValueForField:21 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetSpeedLowSubField]); +} + +- (void)setSecondaryCustomTargetSpeedLow:(FITFloat32)secondaryCustomTargetSpeedLow +{ + [super setFieldFLOAT32ValueForField:21 andValue:(secondaryCustomTargetSpeedLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetSpeedLowSubField]; +} +// SecondaryCustomTargetHeartRateLow - SecondaryCustomTargetValueLow Field - Sub Field +- (BOOL)isSecondaryCustomTargetHeartRateLowValid +{ + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:21 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetHeartRateLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetHeartRateLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutHr)getSecondaryCustomTargetHeartRateLow +{ + return ([super getFieldUINT32ValueForField:21 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetHeartRateLowSubField]); +} + +- (void)setSecondaryCustomTargetHeartRateLow:(FITWorkoutHr)secondaryCustomTargetHeartRateLow +{ + [super setFieldUINT32ValueForField:21 andValue:(secondaryCustomTargetHeartRateLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetHeartRateLowSubField]; +} +// SecondaryCustomTargetCadenceLow - SecondaryCustomTargetValueLow Field - Sub Field +- (BOOL)isSecondaryCustomTargetCadenceLowValid +{ + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:21 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetCadenceLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetCadenceLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryCustomTargetCadenceLow +{ + return ([super getFieldUINT32ValueForField:21 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetCadenceLowSubField]); +} + +- (void)setSecondaryCustomTargetCadenceLow:(FITUInt32)secondaryCustomTargetCadenceLow +{ + [super setFieldUINT32ValueForField:21 andValue:(secondaryCustomTargetCadenceLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetCadenceLowSubField]; +} +// SecondaryCustomTargetPowerLow - SecondaryCustomTargetValueLow Field - Sub Field +- (BOOL)isSecondaryCustomTargetPowerLowValid +{ + const fit::Field* field = [super getField:21]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:21 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetPowerLowSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetPowerLowSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutPower)getSecondaryCustomTargetPowerLow +{ + return ([super getFieldUINT32ValueForField:21 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetPowerLowSubField]); +} + +- (void)setSecondaryCustomTargetPowerLow:(FITWorkoutPower)secondaryCustomTargetPowerLow +{ + [super setFieldUINT32ValueForField:21 andValue:(secondaryCustomTargetPowerLow) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetPowerLowSubField]; +} + +// SecondaryCustomTargetValueHigh +- (BOOL)isSecondaryCustomTargetValueHighValid { + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryCustomTargetValueHigh { + return ([super getFieldUINT32ValueForField:22 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setSecondaryCustomTargetValueHigh:(FITUInt32)secondaryCustomTargetValueHigh { + [super setFieldUINT32ValueForField:22 andValue:(secondaryCustomTargetValueHigh) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} +// SecondaryCustomTargetValueHigh - Sub Fields +// SecondaryCustomTargetSpeedHigh - SecondaryCustomTargetValueHigh Field - Sub Field +- (BOOL)isSecondaryCustomTargetSpeedHighValid +{ + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:22 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetSpeedHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetSpeedHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITFloat32)getSecondaryCustomTargetSpeedHigh +{ + return ([super getFieldFLOAT32ValueForField:22 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetSpeedHighSubField]); +} + +- (void)setSecondaryCustomTargetSpeedHigh:(FITFloat32)secondaryCustomTargetSpeedHigh +{ + [super setFieldFLOAT32ValueForField:22 andValue:(secondaryCustomTargetSpeedHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetSpeedHighSubField]; +} +// SecondaryCustomTargetHeartRateHigh - SecondaryCustomTargetValueHigh Field - Sub Field +- (BOOL)isSecondaryCustomTargetHeartRateHighValid +{ + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:22 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetHeartRateHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetHeartRateHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutHr)getSecondaryCustomTargetHeartRateHigh +{ + return ([super getFieldUINT32ValueForField:22 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetHeartRateHighSubField]); +} + +- (void)setSecondaryCustomTargetHeartRateHigh:(FITWorkoutHr)secondaryCustomTargetHeartRateHigh +{ + [super setFieldUINT32ValueForField:22 andValue:(secondaryCustomTargetHeartRateHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetHeartRateHighSubField]; +} +// SecondaryCustomTargetCadenceHigh - SecondaryCustomTargetValueHigh Field - Sub Field +- (BOOL)isSecondaryCustomTargetCadenceHighValid +{ + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:22 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetCadenceHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetCadenceHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt32)getSecondaryCustomTargetCadenceHigh +{ + return ([super getFieldUINT32ValueForField:22 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetCadenceHighSubField]); +} + +- (void)setSecondaryCustomTargetCadenceHigh:(FITUInt32)secondaryCustomTargetCadenceHigh +{ + [super setFieldUINT32ValueForField:22 andValue:(secondaryCustomTargetCadenceHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetCadenceHighSubField]; +} +// SecondaryCustomTargetPowerHigh - SecondaryCustomTargetValueHigh Field - Sub Field +- (BOOL)isSecondaryCustomTargetPowerHighValid +{ + const fit::Field* field = [super getField:22]; + if( FIT_NULL == field ) { + return FIT_FALSE; + } + + if(![super canField:22 supportSubField:(FITUInt16)FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetPowerHighSubField]) { + return FIT_FALSE; + } + + return field->IsValueValid(0, FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetPowerHighSubField) == FIT_TRUE ? TRUE : FALSE; +} + +- (FITWorkoutPower)getSecondaryCustomTargetPowerHigh +{ + return ([super getFieldUINT32ValueForField:22 forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetPowerHighSubField]); +} + +- (void)setSecondaryCustomTargetPowerHigh:(FITWorkoutPower)secondaryCustomTargetPowerHigh +{ + [super setFieldUINT32ValueForField:22 andValue:(secondaryCustomTargetPowerHigh) forIndex:0 andSubFieldIndex:FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetPowerHighSubField]; +} + +@end diff --git a/Sources/ObjcFIT/FITZonesTargetMesg.mm b/Sources/ObjcFIT/FITZonesTargetMesg.mm new file mode 100644 index 0000000..5e0ca9e --- /dev/null +++ b/Sources/ObjcFIT/FITZonesTargetMesg.mm @@ -0,0 +1,116 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import "FITMessage+Internal.h" + + +#import "FITZonesTargetMesg.h" + +@implementation FITZonesTargetMesg + +- (instancetype)init { + self = [super initWithFitMesgIndex:fit::Profile::MESG_ZONES_TARGET]; + + return self; +} + +// MaxHeartRate +- (BOOL)isMaxHeartRateValid { + const fit::Field* field = [super getField:1]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getMaxHeartRate { + return ([super getFieldUINT8ValueForField:1 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate { + [super setFieldUINT8ValueForField:1 andValue:(maxHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// ThresholdHeartRate +- (BOOL)isThresholdHeartRateValid { + const fit::Field* field = [super getField:2]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt8)getThresholdHeartRate { + return ([super getFieldUINT8ValueForField:2 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setThresholdHeartRate:(FITUInt8)thresholdHeartRate { + [super setFieldUINT8ValueForField:2 andValue:(thresholdHeartRate) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// FunctionalThresholdPower +- (BOOL)isFunctionalThresholdPowerValid { + const fit::Field* field = [super getField:3]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITUInt16)getFunctionalThresholdPower { + return ([super getFieldUINT16ValueForField:3 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setFunctionalThresholdPower:(FITUInt16)functionalThresholdPower { + [super setFieldUINT16ValueForField:3 andValue:(functionalThresholdPower) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// HrCalcType +- (BOOL)isHrCalcTypeValid { + const fit::Field* field = [super getField:5]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITHrZoneCalc)getHrCalcType { + return ([super getFieldENUMValueForField:5 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setHrCalcType:(FITHrZoneCalc)hrCalcType { + [super setFieldENUMValueForField:5 andValue:(hrCalcType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +// PwrCalcType +- (BOOL)isPwrCalcTypeValid { + const fit::Field* field = [super getField:7]; + if( FIT_NULL == field ) { + return FALSE; + } + + return field->IsValueValid() == FIT_TRUE ? TRUE : FALSE; +} + +- (FITPwrZoneCalc)getPwrCalcType { + return ([super getFieldENUMValueForField:7 forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]); +} + +- (void)setPwrCalcType:(FITPwrZoneCalc)pwrCalcType { + [super setFieldENUMValueForField:7 andValue:(pwrCalcType) forIndex:0 andSubFieldIndex:FIT_SUBFIELD_INDEX_MAIN_FIELD]; +} + +@end diff --git a/Sources/ObjcFIT/include/FITAccelerometerDataMesg.h b/Sources/ObjcFIT/include/FITAccelerometerDataMesg.h new file mode 100644 index 0000000..16402ad --- /dev/null +++ b/Sources/ObjcFIT/include/FITAccelerometerDataMesg.h @@ -0,0 +1,84 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITAccelerometerDataMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// SampleTimeOffset +@property(readonly,nonatomic) uint8_t numSampleTimeOffsetValues; +- (BOOL)isSampleTimeOffsetValidforIndex : (uint8_t)index; +- (FITUInt16)getSampleTimeOffsetforIndex : (uint8_t)index; +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index; +// AccelX +@property(readonly,nonatomic) uint8_t numAccelXValues; +- (BOOL)isAccelXValidforIndex : (uint8_t)index; +- (FITUInt16)getAccelXforIndex : (uint8_t)index; +- (void)setAccelX:(FITUInt16)accelX forIndex:(uint8_t)index; +// AccelY +@property(readonly,nonatomic) uint8_t numAccelYValues; +- (BOOL)isAccelYValidforIndex : (uint8_t)index; +- (FITUInt16)getAccelYforIndex : (uint8_t)index; +- (void)setAccelY:(FITUInt16)accelY forIndex:(uint8_t)index; +// AccelZ +@property(readonly,nonatomic) uint8_t numAccelZValues; +- (BOOL)isAccelZValidforIndex : (uint8_t)index; +- (FITUInt16)getAccelZforIndex : (uint8_t)index; +- (void)setAccelZ:(FITUInt16)accelZ forIndex:(uint8_t)index; +// CalibratedAccelX +@property(readonly,nonatomic) uint8_t numCalibratedAccelXValues; +- (BOOL)isCalibratedAccelXValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedAccelXforIndex : (uint8_t)index; +- (void)setCalibratedAccelX:(FITFloat32)calibratedAccelX forIndex:(uint8_t)index; +// CalibratedAccelY +@property(readonly,nonatomic) uint8_t numCalibratedAccelYValues; +- (BOOL)isCalibratedAccelYValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedAccelYforIndex : (uint8_t)index; +- (void)setCalibratedAccelY:(FITFloat32)calibratedAccelY forIndex:(uint8_t)index; +// CalibratedAccelZ +@property(readonly,nonatomic) uint8_t numCalibratedAccelZValues; +- (BOOL)isCalibratedAccelZValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedAccelZforIndex : (uint8_t)index; +- (void)setCalibratedAccelZ:(FITFloat32)calibratedAccelZ forIndex:(uint8_t)index; +// CompressedCalibratedAccelX +@property(readonly,nonatomic) uint8_t numCompressedCalibratedAccelXValues; +- (BOOL)isCompressedCalibratedAccelXValidforIndex : (uint8_t)index; +- (FITSInt16)getCompressedCalibratedAccelXforIndex : (uint8_t)index; +- (void)setCompressedCalibratedAccelX:(FITSInt16)compressedCalibratedAccelX forIndex:(uint8_t)index; +// CompressedCalibratedAccelY +@property(readonly,nonatomic) uint8_t numCompressedCalibratedAccelYValues; +- (BOOL)isCompressedCalibratedAccelYValidforIndex : (uint8_t)index; +- (FITSInt16)getCompressedCalibratedAccelYforIndex : (uint8_t)index; +- (void)setCompressedCalibratedAccelY:(FITSInt16)compressedCalibratedAccelY forIndex:(uint8_t)index; +// CompressedCalibratedAccelZ +@property(readonly,nonatomic) uint8_t numCompressedCalibratedAccelZValues; +- (BOOL)isCompressedCalibratedAccelZValidforIndex : (uint8_t)index; +- (FITSInt16)getCompressedCalibratedAccelZforIndex : (uint8_t)index; +- (void)setCompressedCalibratedAccelZ:(FITSInt16)compressedCalibratedAccelZ forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITActivityMesg.h b/Sources/ObjcFIT/include/FITActivityMesg.h new file mode 100644 index 0000000..f3a670e --- /dev/null +++ b/Sources/ObjcFIT/include/FITActivityMesg.h @@ -0,0 +1,58 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITActivityMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid; +- (FITFloat32)getTotalTimerTime; +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime; +// NumSessions +- (BOOL)isNumSessionsValid; +- (FITUInt16)getNumSessions; +- (void)setNumSessions:(FITUInt16)numSessions; +// Type +- (BOOL)isTypeValid; +- (FITActivity)getType; +- (void)setType:(FITActivity)type; +// Event +- (BOOL)isEventValid; +- (FITEvent)getEvent; +- (void)setEvent:(FITEvent)event; +// EventType +- (BOOL)isEventTypeValid; +- (FITEventType)getEventType; +- (void)setEventType:(FITEventType)eventType; +// LocalTimestamp +- (BOOL)isLocalTimestampValid; +- (FITLocalDateTime)getLocalTimestamp; +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp; +// EventGroup +- (BOOL)isEventGroupValid; +- (FITUInt8)getEventGroup; +- (void)setEventGroup:(FITUInt8)eventGroup; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITAntChannelIdMesg.h b/Sources/ObjcFIT/include/FITAntChannelIdMesg.h new file mode 100644 index 0000000..e90fbb2 --- /dev/null +++ b/Sources/ObjcFIT/include/FITAntChannelIdMesg.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITAntChannelIdMesg : FITMessage +- (id)init; +// ChannelNumber +- (BOOL)isChannelNumberValid; +- (FITUInt8)getChannelNumber; +- (void)setChannelNumber:(FITUInt8)channelNumber; +// DeviceType +- (BOOL)isDeviceTypeValid; +- (FITUInt8z)getDeviceType; +- (void)setDeviceType:(FITUInt8z)deviceType; +// DeviceNumber +- (BOOL)isDeviceNumberValid; +- (FITUInt16z)getDeviceNumber; +- (void)setDeviceNumber:(FITUInt16z)deviceNumber; +// TransmissionType +- (BOOL)isTransmissionTypeValid; +- (FITUInt8z)getTransmissionType; +- (void)setTransmissionType:(FITUInt8z)transmissionType; +// DeviceIndex +- (BOOL)isDeviceIndexValid; +- (FITDeviceIndex)getDeviceIndex; +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITAntRxMesg.h b/Sources/ObjcFIT/include/FITAntRxMesg.h new file mode 100644 index 0000000..897e128 --- /dev/null +++ b/Sources/ObjcFIT/include/FITAntRxMesg.h @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITAntRxMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid; +- (FITFloat32)getFractionalTimestamp; +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp; +// MesgId +- (BOOL)isMesgIdValid; +- (FITByte)getMesgId; +- (void)setMesgId:(FITByte)mesgId; +// MesgData +@property(readonly,nonatomic) uint8_t numMesgDataValues; +- (BOOL)isMesgDataValidforIndex : (uint8_t)index; +- (FITByte)getMesgDataforIndex : (uint8_t)index; +- (void)setMesgData:(FITByte)mesgData forIndex:(uint8_t)index; +// ChannelNumber +- (BOOL)isChannelNumberValid; +- (FITUInt8)getChannelNumber; +- (void)setChannelNumber:(FITUInt8)channelNumber; +// Data +@property(readonly,nonatomic) uint8_t numDataValues; +- (BOOL)isDataValidforIndex : (uint8_t)index; +- (FITByte)getDataforIndex : (uint8_t)index; +- (void)setData:(FITByte)data forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITAntTxMesg.h b/Sources/ObjcFIT/include/FITAntTxMesg.h new file mode 100644 index 0000000..5a14d33 --- /dev/null +++ b/Sources/ObjcFIT/include/FITAntTxMesg.h @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITAntTxMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid; +- (FITFloat32)getFractionalTimestamp; +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp; +// MesgId +- (BOOL)isMesgIdValid; +- (FITByte)getMesgId; +- (void)setMesgId:(FITByte)mesgId; +// MesgData +@property(readonly,nonatomic) uint8_t numMesgDataValues; +- (BOOL)isMesgDataValidforIndex : (uint8_t)index; +- (FITByte)getMesgDataforIndex : (uint8_t)index; +- (void)setMesgData:(FITByte)mesgData forIndex:(uint8_t)index; +// ChannelNumber +- (BOOL)isChannelNumberValid; +- (FITUInt8)getChannelNumber; +- (void)setChannelNumber:(FITUInt8)channelNumber; +// Data +@property(readonly,nonatomic) uint8_t numDataValues; +- (BOOL)isDataValidforIndex : (uint8_t)index; +- (FITByte)getDataforIndex : (uint8_t)index; +- (void)setData:(FITByte)data forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITAviationAttitudeMesg.h b/Sources/ObjcFIT/include/FITAviationAttitudeMesg.h new file mode 100644 index 0000000..68aae45 --- /dev/null +++ b/Sources/ObjcFIT/include/FITAviationAttitudeMesg.h @@ -0,0 +1,84 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITAviationAttitudeMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// SystemTime +@property(readonly,nonatomic) uint8_t numSystemTimeValues; +- (BOOL)isSystemTimeValidforIndex : (uint8_t)index; +- (FITUInt32)getSystemTimeforIndex : (uint8_t)index; +- (void)setSystemTime:(FITUInt32)systemTime forIndex:(uint8_t)index; +// Pitch +@property(readonly,nonatomic) uint8_t numPitchValues; +- (BOOL)isPitchValidforIndex : (uint8_t)index; +- (FITFloat32)getPitchforIndex : (uint8_t)index; +- (void)setPitch:(FITFloat32)pitch forIndex:(uint8_t)index; +// Roll +@property(readonly,nonatomic) uint8_t numRollValues; +- (BOOL)isRollValidforIndex : (uint8_t)index; +- (FITFloat32)getRollforIndex : (uint8_t)index; +- (void)setRoll:(FITFloat32)roll forIndex:(uint8_t)index; +// AccelLateral +@property(readonly,nonatomic) uint8_t numAccelLateralValues; +- (BOOL)isAccelLateralValidforIndex : (uint8_t)index; +- (FITFloat32)getAccelLateralforIndex : (uint8_t)index; +- (void)setAccelLateral:(FITFloat32)accelLateral forIndex:(uint8_t)index; +// AccelNormal +@property(readonly,nonatomic) uint8_t numAccelNormalValues; +- (BOOL)isAccelNormalValidforIndex : (uint8_t)index; +- (FITFloat32)getAccelNormalforIndex : (uint8_t)index; +- (void)setAccelNormal:(FITFloat32)accelNormal forIndex:(uint8_t)index; +// TurnRate +@property(readonly,nonatomic) uint8_t numTurnRateValues; +- (BOOL)isTurnRateValidforIndex : (uint8_t)index; +- (FITFloat32)getTurnRateforIndex : (uint8_t)index; +- (void)setTurnRate:(FITFloat32)turnRate forIndex:(uint8_t)index; +// Stage +@property(readonly,nonatomic) uint8_t numStageValues; +- (BOOL)isStageValidforIndex : (uint8_t)index; +- (FITAttitudeStage)getStageforIndex : (uint8_t)index; +- (void)setStage:(FITAttitudeStage)stage forIndex:(uint8_t)index; +// AttitudeStageComplete +@property(readonly,nonatomic) uint8_t numAttitudeStageCompleteValues; +- (BOOL)isAttitudeStageCompleteValidforIndex : (uint8_t)index; +- (FITUInt8)getAttitudeStageCompleteforIndex : (uint8_t)index; +- (void)setAttitudeStageComplete:(FITUInt8)attitudeStageComplete forIndex:(uint8_t)index; +// Track +@property(readonly,nonatomic) uint8_t numTrackValues; +- (BOOL)isTrackValidforIndex : (uint8_t)index; +- (FITFloat32)getTrackforIndex : (uint8_t)index; +- (void)setTrack:(FITFloat32)track forIndex:(uint8_t)index; +// Validity +@property(readonly,nonatomic) uint8_t numValidityValues; +- (BOOL)isValidityValidforIndex : (uint8_t)index; +- (FITAttitudeValidity)getValidityforIndex : (uint8_t)index; +- (void)setValidity:(FITAttitudeValidity)validity forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITBarometerDataMesg.h b/Sources/ObjcFIT/include/FITBarometerDataMesg.h new file mode 100644 index 0000000..794d321 --- /dev/null +++ b/Sources/ObjcFIT/include/FITBarometerDataMesg.h @@ -0,0 +1,44 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITBarometerDataMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// SampleTimeOffset +@property(readonly,nonatomic) uint8_t numSampleTimeOffsetValues; +- (BOOL)isSampleTimeOffsetValidforIndex : (uint8_t)index; +- (FITUInt16)getSampleTimeOffsetforIndex : (uint8_t)index; +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index; +// BaroPres +@property(readonly,nonatomic) uint8_t numBaroPresValues; +- (BOOL)isBaroPresValidforIndex : (uint8_t)index; +- (FITUInt32)getBaroPresforIndex : (uint8_t)index; +- (void)setBaroPres:(FITUInt32)baroPres forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITBikeProfileMesg.h b/Sources/ObjcFIT/include/FITBikeProfileMesg.h new file mode 100644 index 0000000..1918cfc --- /dev/null +++ b/Sources/ObjcFIT/include/FITBikeProfileMesg.h @@ -0,0 +1,155 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITBikeProfileMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// Odometer +- (BOOL)isOdometerValid; +- (FITFloat32)getOdometer; +- (void)setOdometer:(FITFloat32)odometer; +// BikeSpdAntId +- (BOOL)isBikeSpdAntIdValid; +- (FITUInt16z)getBikeSpdAntId; +- (void)setBikeSpdAntId:(FITUInt16z)bikeSpdAntId; +// BikeCadAntId +- (BOOL)isBikeCadAntIdValid; +- (FITUInt16z)getBikeCadAntId; +- (void)setBikeCadAntId:(FITUInt16z)bikeCadAntId; +// BikeSpdcadAntId +- (BOOL)isBikeSpdcadAntIdValid; +- (FITUInt16z)getBikeSpdcadAntId; +- (void)setBikeSpdcadAntId:(FITUInt16z)bikeSpdcadAntId; +// BikePowerAntId +- (BOOL)isBikePowerAntIdValid; +- (FITUInt16z)getBikePowerAntId; +- (void)setBikePowerAntId:(FITUInt16z)bikePowerAntId; +// CustomWheelsize +- (BOOL)isCustomWheelsizeValid; +- (FITFloat32)getCustomWheelsize; +- (void)setCustomWheelsize:(FITFloat32)customWheelsize; +// AutoWheelsize +- (BOOL)isAutoWheelsizeValid; +- (FITFloat32)getAutoWheelsize; +- (void)setAutoWheelsize:(FITFloat32)autoWheelsize; +// BikeWeight +- (BOOL)isBikeWeightValid; +- (FITFloat32)getBikeWeight; +- (void)setBikeWeight:(FITFloat32)bikeWeight; +// PowerCalFactor +- (BOOL)isPowerCalFactorValid; +- (FITFloat32)getPowerCalFactor; +- (void)setPowerCalFactor:(FITFloat32)powerCalFactor; +// AutoWheelCal +- (BOOL)isAutoWheelCalValid; +- (FITBool)getAutoWheelCal; +- (void)setAutoWheelCal:(FITBool)autoWheelCal; +// AutoPowerZero +- (BOOL)isAutoPowerZeroValid; +- (FITBool)getAutoPowerZero; +- (void)setAutoPowerZero:(FITBool)autoPowerZero; +// Id +- (BOOL)isIdValid; +- (FITUInt8)getId; +- (void)setId:(FITUInt8)id; +// SpdEnabled +- (BOOL)isSpdEnabledValid; +- (FITBool)getSpdEnabled; +- (void)setSpdEnabled:(FITBool)spdEnabled; +// CadEnabled +- (BOOL)isCadEnabledValid; +- (FITBool)getCadEnabled; +- (void)setCadEnabled:(FITBool)cadEnabled; +// SpdcadEnabled +- (BOOL)isSpdcadEnabledValid; +- (FITBool)getSpdcadEnabled; +- (void)setSpdcadEnabled:(FITBool)spdcadEnabled; +// PowerEnabled +- (BOOL)isPowerEnabledValid; +- (FITBool)getPowerEnabled; +- (void)setPowerEnabled:(FITBool)powerEnabled; +// CrankLength +- (BOOL)isCrankLengthValid; +- (FITFloat32)getCrankLength; +- (void)setCrankLength:(FITFloat32)crankLength; +// Enabled +- (BOOL)isEnabledValid; +- (FITBool)getEnabled; +- (void)setEnabled:(FITBool)enabled; +// BikeSpdAntIdTransType +- (BOOL)isBikeSpdAntIdTransTypeValid; +- (FITUInt8z)getBikeSpdAntIdTransType; +- (void)setBikeSpdAntIdTransType:(FITUInt8z)bikeSpdAntIdTransType; +// BikeCadAntIdTransType +- (BOOL)isBikeCadAntIdTransTypeValid; +- (FITUInt8z)getBikeCadAntIdTransType; +- (void)setBikeCadAntIdTransType:(FITUInt8z)bikeCadAntIdTransType; +// BikeSpdcadAntIdTransType +- (BOOL)isBikeSpdcadAntIdTransTypeValid; +- (FITUInt8z)getBikeSpdcadAntIdTransType; +- (void)setBikeSpdcadAntIdTransType:(FITUInt8z)bikeSpdcadAntIdTransType; +// BikePowerAntIdTransType +- (BOOL)isBikePowerAntIdTransTypeValid; +- (FITUInt8z)getBikePowerAntIdTransType; +- (void)setBikePowerAntIdTransType:(FITUInt8z)bikePowerAntIdTransType; +// OdometerRollover +- (BOOL)isOdometerRolloverValid; +- (FITUInt8)getOdometerRollover; +- (void)setOdometerRollover:(FITUInt8)odometerRollover; +// FrontGearNum +- (BOOL)isFrontGearNumValid; +- (FITUInt8z)getFrontGearNum; +- (void)setFrontGearNum:(FITUInt8z)frontGearNum; +// FrontGear +@property(readonly,nonatomic) uint8_t numFrontGearValues; +- (BOOL)isFrontGearValidforIndex : (uint8_t)index; +- (FITUInt8z)getFrontGearforIndex : (uint8_t)index; +- (void)setFrontGear:(FITUInt8z)frontGear forIndex:(uint8_t)index; +// RearGearNum +- (BOOL)isRearGearNumValid; +- (FITUInt8z)getRearGearNum; +- (void)setRearGearNum:(FITUInt8z)rearGearNum; +// RearGear +@property(readonly,nonatomic) uint8_t numRearGearValues; +- (BOOL)isRearGearValidforIndex : (uint8_t)index; +- (FITUInt8z)getRearGearforIndex : (uint8_t)index; +- (void)setRearGear:(FITUInt8z)rearGear forIndex:(uint8_t)index; +// ShimanoDi2Enabled +- (BOOL)isShimanoDi2EnabledValid; +- (FITBool)getShimanoDi2Enabled; +- (void)setShimanoDi2Enabled:(FITBool)shimanoDi2Enabled; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITBloodPressureMesg.h b/Sources/ObjcFIT/include/FITBloodPressureMesg.h new file mode 100644 index 0000000..cbe85ca --- /dev/null +++ b/Sources/ObjcFIT/include/FITBloodPressureMesg.h @@ -0,0 +1,70 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITBloodPressureMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// SystolicPressure +- (BOOL)isSystolicPressureValid; +- (FITUInt16)getSystolicPressure; +- (void)setSystolicPressure:(FITUInt16)systolicPressure; +// DiastolicPressure +- (BOOL)isDiastolicPressureValid; +- (FITUInt16)getDiastolicPressure; +- (void)setDiastolicPressure:(FITUInt16)diastolicPressure; +// MeanArterialPressure +- (BOOL)isMeanArterialPressureValid; +- (FITUInt16)getMeanArterialPressure; +- (void)setMeanArterialPressure:(FITUInt16)meanArterialPressure; +// Map3SampleMean +- (BOOL)isMap3SampleMeanValid; +- (FITUInt16)getMap3SampleMean; +- (void)setMap3SampleMean:(FITUInt16)map3SampleMean; +// MapMorningValues +- (BOOL)isMapMorningValuesValid; +- (FITUInt16)getMapMorningValues; +- (void)setMapMorningValues:(FITUInt16)mapMorningValues; +// MapEveningValues +- (BOOL)isMapEveningValuesValid; +- (FITUInt16)getMapEveningValues; +- (void)setMapEveningValues:(FITUInt16)mapEveningValues; +// HeartRate +- (BOOL)isHeartRateValid; +- (FITUInt8)getHeartRate; +- (void)setHeartRate:(FITUInt8)heartRate; +// HeartRateType +- (BOOL)isHeartRateTypeValid; +- (FITHrType)getHeartRateType; +- (void)setHeartRateType:(FITHrType)heartRateType; +// Status +- (BOOL)isStatusValid; +- (FITBpStatus)getStatus; +- (void)setStatus:(FITBpStatus)status; +// UserProfileIndex +- (BOOL)isUserProfileIndexValid; +- (FITMessageIndex)getUserProfileIndex; +- (void)setUserProfileIndex:(FITMessageIndex)userProfileIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITCadenceZoneMesg.h b/Sources/ObjcFIT/include/FITCadenceZoneMesg.h new file mode 100644 index 0000000..50c072c --- /dev/null +++ b/Sources/ObjcFIT/include/FITCadenceZoneMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITCadenceZoneMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// HighValue +- (BOOL)isHighValueValid; +- (FITUInt8)getHighValue; +- (void)setHighValue:(FITUInt8)highValue; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITCameraEventMesg.h b/Sources/ObjcFIT/include/FITCameraEventMesg.h new file mode 100644 index 0000000..6623ad5 --- /dev/null +++ b/Sources/ObjcFIT/include/FITCameraEventMesg.h @@ -0,0 +1,46 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITCameraEventMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// CameraEventType +- (BOOL)isCameraEventTypeValid; +- (FITCameraEventType)getCameraEventType; +- (void)setCameraEventType:(FITCameraEventType)cameraEventType; +// CameraFileUuid +- (BOOL)isCameraFileUuidValid; +- (NSString *)getCameraFileUuid; +- (void)setCameraFileUuid:(NSString *)cameraFileUuid; +// CameraOrientation +- (BOOL)isCameraOrientationValid; +- (FITCameraOrientationType)getCameraOrientation; +- (void)setCameraOrientation:(FITCameraOrientationType)cameraOrientation; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITCapabilitiesMesg.h b/Sources/ObjcFIT/include/FITCapabilitiesMesg.h new file mode 100644 index 0000000..5dd1067 --- /dev/null +++ b/Sources/ObjcFIT/include/FITCapabilitiesMesg.h @@ -0,0 +1,43 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITCapabilitiesMesg : FITMessage +- (id)init; +// Languages +@property(readonly,nonatomic) uint8_t numLanguagesValues; +- (BOOL)isLanguagesValidforIndex : (uint8_t)index; +- (FITUInt8z)getLanguagesforIndex : (uint8_t)index; +- (void)setLanguages:(FITUInt8z)languages forIndex:(uint8_t)index; +// Sports +@property(readonly,nonatomic) uint8_t numSportsValues; +- (BOOL)isSportsValidforIndex : (uint8_t)index; +- (FITSportBits0)getSportsforIndex : (uint8_t)index; +- (void)setSports:(FITSportBits0)sports forIndex:(uint8_t)index; +// WorkoutsSupported +- (BOOL)isWorkoutsSupportedValid; +- (FITWorkoutCapabilities)getWorkoutsSupported; +- (void)setWorkoutsSupported:(FITWorkoutCapabilities)workoutsSupported; +// ConnectivitySupported +- (BOOL)isConnectivitySupportedValid; +- (FITConnectivityCapabilities)getConnectivitySupported; +- (void)setConnectivitySupported:(FITConnectivityCapabilities)connectivitySupported; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITClimbProMesg.h b/Sources/ObjcFIT/include/FITClimbProMesg.h new file mode 100644 index 0000000..5703873 --- /dev/null +++ b/Sources/ObjcFIT/include/FITClimbProMesg.h @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITClimbProMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// PositionLat +- (BOOL)isPositionLatValid; +- (FITSInt32)getPositionLat; +- (void)setPositionLat:(FITSInt32)positionLat; +// PositionLong +- (BOOL)isPositionLongValid; +- (FITSInt32)getPositionLong; +- (void)setPositionLong:(FITSInt32)positionLong; +// ClimbProEvent +- (BOOL)isClimbProEventValid; +- (FITClimbProEvent)getClimbProEvent; +- (void)setClimbProEvent:(FITClimbProEvent)climbProEvent; +// ClimbNumber +- (BOOL)isClimbNumberValid; +- (FITUInt16)getClimbNumber; +- (void)setClimbNumber:(FITUInt16)climbNumber; +// ClimbCategory +- (BOOL)isClimbCategoryValid; +- (FITUInt8)getClimbCategory; +- (void)setClimbCategory:(FITUInt8)climbCategory; +// CurrentDist +- (BOOL)isCurrentDistValid; +- (FITFloat32)getCurrentDist; +- (void)setCurrentDist:(FITFloat32)currentDist; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITConnectivityMesg.h b/Sources/ObjcFIT/include/FITConnectivityMesg.h new file mode 100644 index 0000000..ae07674 --- /dev/null +++ b/Sources/ObjcFIT/include/FITConnectivityMesg.h @@ -0,0 +1,77 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITConnectivityMesg : FITMessage +- (id)init; +// BluetoothEnabled +- (BOOL)isBluetoothEnabledValid; +- (FITBool)getBluetoothEnabled; +- (void)setBluetoothEnabled:(FITBool)bluetoothEnabled; +// BluetoothLeEnabled +- (BOOL)isBluetoothLeEnabledValid; +- (FITBool)getBluetoothLeEnabled; +- (void)setBluetoothLeEnabled:(FITBool)bluetoothLeEnabled; +// AntEnabled +- (BOOL)isAntEnabledValid; +- (FITBool)getAntEnabled; +- (void)setAntEnabled:(FITBool)antEnabled; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// LiveTrackingEnabled +- (BOOL)isLiveTrackingEnabledValid; +- (FITBool)getLiveTrackingEnabled; +- (void)setLiveTrackingEnabled:(FITBool)liveTrackingEnabled; +// WeatherConditionsEnabled +- (BOOL)isWeatherConditionsEnabledValid; +- (FITBool)getWeatherConditionsEnabled; +- (void)setWeatherConditionsEnabled:(FITBool)weatherConditionsEnabled; +// WeatherAlertsEnabled +- (BOOL)isWeatherAlertsEnabledValid; +- (FITBool)getWeatherAlertsEnabled; +- (void)setWeatherAlertsEnabled:(FITBool)weatherAlertsEnabled; +// AutoActivityUploadEnabled +- (BOOL)isAutoActivityUploadEnabledValid; +- (FITBool)getAutoActivityUploadEnabled; +- (void)setAutoActivityUploadEnabled:(FITBool)autoActivityUploadEnabled; +// CourseDownloadEnabled +- (BOOL)isCourseDownloadEnabledValid; +- (FITBool)getCourseDownloadEnabled; +- (void)setCourseDownloadEnabled:(FITBool)courseDownloadEnabled; +// WorkoutDownloadEnabled +- (BOOL)isWorkoutDownloadEnabledValid; +- (FITBool)getWorkoutDownloadEnabled; +- (void)setWorkoutDownloadEnabled:(FITBool)workoutDownloadEnabled; +// GpsEphemerisDownloadEnabled +- (BOOL)isGpsEphemerisDownloadEnabledValid; +- (FITBool)getGpsEphemerisDownloadEnabled; +- (void)setGpsEphemerisDownloadEnabled:(FITBool)gpsEphemerisDownloadEnabled; +// IncidentDetectionEnabled +- (BOOL)isIncidentDetectionEnabledValid; +- (FITBool)getIncidentDetectionEnabled; +- (void)setIncidentDetectionEnabled:(FITBool)incidentDetectionEnabled; +// GrouptrackEnabled +- (BOOL)isGrouptrackEnabledValid; +- (FITBool)getGrouptrackEnabled; +- (void)setGrouptrackEnabled:(FITBool)grouptrackEnabled; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITCourseMesg.h b/Sources/ObjcFIT/include/FITCourseMesg.h new file mode 100644 index 0000000..1428a97 --- /dev/null +++ b/Sources/ObjcFIT/include/FITCourseMesg.h @@ -0,0 +1,41 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITCourseMesg : FITMessage +- (id)init; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// Capabilities +- (BOOL)isCapabilitiesValid; +- (FITCourseCapabilities)getCapabilities; +- (void)setCapabilities:(FITCourseCapabilities)capabilities; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITCoursePointMesg.h b/Sources/ObjcFIT/include/FITCoursePointMesg.h new file mode 100644 index 0000000..4be8520 --- /dev/null +++ b/Sources/ObjcFIT/include/FITCoursePointMesg.h @@ -0,0 +1,58 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITCoursePointMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// PositionLat +- (BOOL)isPositionLatValid; +- (FITSInt32)getPositionLat; +- (void)setPositionLat:(FITSInt32)positionLat; +// PositionLong +- (BOOL)isPositionLongValid; +- (FITSInt32)getPositionLong; +- (void)setPositionLong:(FITSInt32)positionLong; +// Distance +- (BOOL)isDistanceValid; +- (FITFloat32)getDistance; +- (void)setDistance:(FITFloat32)distance; +// Type +- (BOOL)isTypeValid; +- (FITCoursePoint)getType; +- (void)setType:(FITCoursePoint)type; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// Favorite +- (BOOL)isFavoriteValid; +- (FITBool)getFavorite; +- (void)setFavorite:(FITBool)favorite; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDate.h b/Sources/ObjcFIT/include/FITDate.h new file mode 100644 index 0000000..b546312 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDate.h @@ -0,0 +1,60 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import +#import "FITTypes.h" + +const NSTimeInterval UnixEpochToFITEpoch = 631065600; // Number of seconds between UNIX Epoch and Garmin Epoch + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDate : NSObject + ++ (NSDate *)FITEpoch; ++ (NSDate *)DateFromFITDate:(FITDate *) date; ++ (NSDate *)DateFromFITDateTime:(FITDateTime) timestamp; ++ (FITDateTime)FITDateTimeFromDate:(NSDate *) date; + +@property (nonatomic, assign) FITDateTime timestamp; +@property (nonatomic, assign) float fractionalTimeStamp; +@property (nonatomic, readonly) NSDate * date; + +- (id)init; +- (id)initWithDate:(NSDate *)date; +- (id)initWithFITDate:(FITDate *)date; +- (id)initWithTimestamp:(FITDateTime)timestamp; +- (id)initWithTimestamp:(FITDateTime)timestamp andFractionalTimestamp:(float) fractionalTimestamp; +- (NSDate *)getDate __attribute((deprecated("Use the date property instead."))); + +// Comparing Dates +- (BOOL)isEqualToDate:(FITDate *)otherDate; +- (FITDate *)earlierDate:(FITDate *)otherDate; +- (FITDate *)laterDate:(FITDate *)otherDate; +- (NSComparisonResult)compare:(FITDate *)otherDate; + +// Getting Time Intervals +- (NSTimeInterval)timeIntervalSinceDate:(FITDate *)otherDate; + +// Adding Time Intervals +- (instancetype)dateByAddingTimeInterval:(NSTimeInterval)ti; + +@end + +NS_INLINE FITDate* FITDateFromTimestamp(FITDateTime timestamp) { + return [[FITDate alloc] initWithTimestamp:timestamp]; +}; + +NS_INLINE FITDateTime TimestampFromFITDate(FITDate* date) { + return [date timestamp]; +}; + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDecoder.h b/Sources/ObjcFIT/include/FITDecoder.h new file mode 100644 index 0000000..33ff259 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDecoder.h @@ -0,0 +1,46 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import + +#import "FITMessage.h" +#import "FITDeveloperFieldDefinition.h" + +NS_ASSUME_NONNULL_BEGIN + +@class FITDecoder; +@protocol FITMesgDelegate +- (void)onMesg:(FITMessage*)mesg; +@end + +@protocol FITMesgDefinitionDelegate +- (void)onMesgDefinition:(FITMessage*)mesg; +@end + +@protocol FITDeveloperFieldDefinitionDelegate +- (void)onDeveloperFieldDefinition:(FITDeveloperFieldDefinition*)definition; +@end + +@interface FITDecoder : NSObject +@property (strong) idmesgDelegate; +@property (strong) idmesgDefinitionDelegate; +@property (strong) iddeveloperFieldDefinitionDelegate; +- (instancetype)init; +- (BOOL)isFIT:(NSString*)filename; +- (BOOL)checkIntegrity:(NSString*)filename; +- (BOOL)decodeFile:(NSString *)filename; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDeveloperDataIdMesg.h b/Sources/ObjcFIT/include/FITDeveloperDataIdMesg.h new file mode 100644 index 0000000..37a7685 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDeveloperDataIdMesg.h @@ -0,0 +1,47 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDeveloperDataIdMesg : FITMessage +- (id)init; +// DeveloperId +@property(readonly,nonatomic) uint8_t numDeveloperIdValues; +- (BOOL)isDeveloperIdValidforIndex : (uint8_t)index; +- (FITByte)getDeveloperIdforIndex : (uint8_t)index; +- (void)setDeveloperId:(FITByte)developerId forIndex:(uint8_t)index; +// ApplicationId +@property(readonly,nonatomic) uint8_t numApplicationIdValues; +- (BOOL)isApplicationIdValidforIndex : (uint8_t)index; +- (FITByte)getApplicationIdforIndex : (uint8_t)index; +- (void)setApplicationId:(FITByte)applicationId forIndex:(uint8_t)index; +// ManufacturerId +- (BOOL)isManufacturerIdValid; +- (FITManufacturer)getManufacturerId; +- (void)setManufacturerId:(FITManufacturer)manufacturerId; +// DeveloperDataIndex +- (BOOL)isDeveloperDataIndexValid; +- (FITUInt8)getDeveloperDataIndex; +- (void)setDeveloperDataIndex:(FITUInt8)developerDataIndex; +// ApplicationVersion +- (BOOL)isApplicationVersionValid; +- (FITUInt32)getApplicationVersion; +- (void)setApplicationVersion:(FITUInt32)applicationVersion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDeveloperFieldDef.h b/Sources/ObjcFIT/include/FITDeveloperFieldDef.h new file mode 100644 index 0000000..c94c9f5 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDeveloperFieldDef.h @@ -0,0 +1,32 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITTypes.h" +#import "FITFieldDescriptionMesg.h" +#import "FITDeveloperDataIdMesg.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDeveloperField : NSObject + +- (id)initWithFieldDescriptionMesg: (FITFieldDescriptionMesg*) definition andDeveloperDataIdMesg: (FITDeveloperDataIdMesg*) developer; +- (void)addValue:(NSNumber*)value forIndex:(uint8_t)index; +- (NSNumber*)getValueForIndex:(uint8_t)index; + +@property(nonatomic, readonly) FITFieldDescriptionMesg* definition; +@property(nonatomic, readonly) FITDeveloperDataIdMesg* developer; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Sources/ObjcFIT/include/FITDeveloperFieldDefinition.h b/Sources/ObjcFIT/include/FITDeveloperFieldDefinition.h new file mode 100644 index 0000000..6768f31 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDeveloperFieldDefinition.h @@ -0,0 +1,32 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITTypes.h" +#import "FITFieldDescriptionMesg.h" +#import "FITDeveloperDataIdMesg.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDeveloperFieldDefinition : NSObject + +- (id)initWithFieldDescriptionMesg: (FITFieldDescriptionMesg*) fieldDescription andDeveloperDataIdMesg: (FITDeveloperDataIdMesg*) developer; + +@property(nonatomic, readonly) FITFieldDescriptionMesg* fieldDescription; +@property(nonatomic, readonly) FITDeveloperDataIdMesg* developer; + +-(BOOL) isDefined; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Sources/ObjcFIT/include/FITDeviceAuxBatteryInfoMesg.h b/Sources/ObjcFIT/include/FITDeviceAuxBatteryInfoMesg.h new file mode 100644 index 0000000..f953b79 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDeviceAuxBatteryInfoMesg.h @@ -0,0 +1,46 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDeviceAuxBatteryInfoMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// DeviceIndex +- (BOOL)isDeviceIndexValid; +- (FITDeviceIndex)getDeviceIndex; +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex; +// BatteryVoltage +- (BOOL)isBatteryVoltageValid; +- (FITFloat32)getBatteryVoltage; +- (void)setBatteryVoltage:(FITFloat32)batteryVoltage; +// BatteryStatus +- (BOOL)isBatteryStatusValid; +- (FITBatteryStatus)getBatteryStatus; +- (void)setBatteryStatus:(FITBatteryStatus)batteryStatus; +// BatteryIdentifier +- (BOOL)isBatteryIdentifierValid; +- (FITUInt8)getBatteryIdentifier; +- (void)setBatteryIdentifier:(FITUInt8)batteryIdentifier; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDeviceInfoMesg.h b/Sources/ObjcFIT/include/FITDeviceInfoMesg.h new file mode 100644 index 0000000..8f36598 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDeviceInfoMesg.h @@ -0,0 +1,116 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDeviceInfoMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// DeviceIndex +- (BOOL)isDeviceIndexValid; +- (FITDeviceIndex)getDeviceIndex; +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex; +// DeviceType +- (BOOL)isDeviceTypeValid; +- (FITUInt8)getDeviceType; +- (void)setDeviceType:(FITUInt8)deviceType; +// DeviceType Sub Fields +- (BOOL)isAntplusDeviceTypeValid; +- (FITAntplusDeviceType) getAntplusDeviceType; +- (void)setAntplusDeviceType:(FITAntplusDeviceType)antplusDeviceType; +- (BOOL)isAntDeviceTypeValid; +- (FITUInt8) getAntDeviceType; +- (void)setAntDeviceType:(FITUInt8)antDeviceType; +// Manufacturer +- (BOOL)isManufacturerValid; +- (FITManufacturer)getManufacturer; +- (void)setManufacturer:(FITManufacturer)manufacturer; +// SerialNumber +- (BOOL)isSerialNumberValid; +- (FITUInt32z)getSerialNumber; +- (void)setSerialNumber:(FITUInt32z)serialNumber; +// Product +- (BOOL)isProductValid; +- (FITUInt16)getProduct; +- (void)setProduct:(FITUInt16)product; +// Product Sub Fields +- (BOOL)isFaveroProductValid; +- (FITFaveroProduct) getFaveroProduct; +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct; +- (BOOL)isGarminProductValid; +- (FITGarminProduct) getGarminProduct; +- (void)setGarminProduct:(FITGarminProduct)garminProduct; +// SoftwareVersion +- (BOOL)isSoftwareVersionValid; +- (FITFloat32)getSoftwareVersion; +- (void)setSoftwareVersion:(FITFloat32)softwareVersion; +// HardwareVersion +- (BOOL)isHardwareVersionValid; +- (FITUInt8)getHardwareVersion; +- (void)setHardwareVersion:(FITUInt8)hardwareVersion; +// CumOperatingTime +- (BOOL)isCumOperatingTimeValid; +- (FITUInt32)getCumOperatingTime; +- (void)setCumOperatingTime:(FITUInt32)cumOperatingTime; +// BatteryVoltage +- (BOOL)isBatteryVoltageValid; +- (FITFloat32)getBatteryVoltage; +- (void)setBatteryVoltage:(FITFloat32)batteryVoltage; +// BatteryStatus +- (BOOL)isBatteryStatusValid; +- (FITBatteryStatus)getBatteryStatus; +- (void)setBatteryStatus:(FITBatteryStatus)batteryStatus; +// SensorPosition +- (BOOL)isSensorPositionValid; +- (FITBodyLocation)getSensorPosition; +- (void)setSensorPosition:(FITBodyLocation)sensorPosition; +// Descriptor +- (BOOL)isDescriptorValid; +- (NSString *)getDescriptor; +- (void)setDescriptor:(NSString *)descriptor; +// AntTransmissionType +- (BOOL)isAntTransmissionTypeValid; +- (FITUInt8z)getAntTransmissionType; +- (void)setAntTransmissionType:(FITUInt8z)antTransmissionType; +// AntDeviceNumber +- (BOOL)isAntDeviceNumberValid; +- (FITUInt16z)getAntDeviceNumber; +- (void)setAntDeviceNumber:(FITUInt16z)antDeviceNumber; +// AntNetwork +- (BOOL)isAntNetworkValid; +- (FITAntNetwork)getAntNetwork; +- (void)setAntNetwork:(FITAntNetwork)antNetwork; +// SourceType +- (BOOL)isSourceTypeValid; +- (FITSourceType)getSourceType; +- (void)setSourceType:(FITSourceType)sourceType; +// ProductName +- (BOOL)isProductNameValid; +- (NSString *)getProductName; +- (void)setProductName:(NSString *)productName; +// BatteryLevel +- (BOOL)isBatteryLevelValid; +- (FITUInt8)getBatteryLevel; +- (void)setBatteryLevel:(FITUInt8)batteryLevel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDeviceSettingsMesg.h b/Sources/ObjcFIT/include/FITDeviceSettingsMesg.h new file mode 100644 index 0000000..275d065 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDeviceSettingsMesg.h @@ -0,0 +1,127 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDeviceSettingsMesg : FITMessage +- (id)init; +// ActiveTimeZone +- (BOOL)isActiveTimeZoneValid; +- (FITUInt8)getActiveTimeZone; +- (void)setActiveTimeZone:(FITUInt8)activeTimeZone; +// UtcOffset +- (BOOL)isUtcOffsetValid; +- (FITUInt32)getUtcOffset; +- (void)setUtcOffset:(FITUInt32)utcOffset; +// TimeOffset +@property(readonly,nonatomic) uint8_t numTimeOffsetValues; +- (BOOL)isTimeOffsetValidforIndex : (uint8_t)index; +- (FITUInt32)getTimeOffsetforIndex : (uint8_t)index; +- (void)setTimeOffset:(FITUInt32)timeOffset forIndex:(uint8_t)index; +// TimeMode +@property(readonly,nonatomic) uint8_t numTimeModeValues; +- (BOOL)isTimeModeValidforIndex : (uint8_t)index; +- (FITTimeMode)getTimeModeforIndex : (uint8_t)index; +- (void)setTimeMode:(FITTimeMode)timeMode forIndex:(uint8_t)index; +// TimeZoneOffset +@property(readonly,nonatomic) uint8_t numTimeZoneOffsetValues; +- (BOOL)isTimeZoneOffsetValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeZoneOffsetforIndex : (uint8_t)index; +- (void)setTimeZoneOffset:(FITFloat32)timeZoneOffset forIndex:(uint8_t)index; +// BacklightMode +- (BOOL)isBacklightModeValid; +- (FITBacklightMode)getBacklightMode; +- (void)setBacklightMode:(FITBacklightMode)backlightMode; +// ActivityTrackerEnabled +- (BOOL)isActivityTrackerEnabledValid; +- (FITBool)getActivityTrackerEnabled; +- (void)setActivityTrackerEnabled:(FITBool)activityTrackerEnabled; +// ClockTime +- (BOOL)isClockTimeValid; +- (FITDate *)getClockTime; +- (void)setClockTime:(FITDate *)clockTime; +// PagesEnabled +@property(readonly,nonatomic) uint8_t numPagesEnabledValues; +- (BOOL)isPagesEnabledValidforIndex : (uint8_t)index; +- (FITUInt16)getPagesEnabledforIndex : (uint8_t)index; +- (void)setPagesEnabled:(FITUInt16)pagesEnabled forIndex:(uint8_t)index; +// MoveAlertEnabled +- (BOOL)isMoveAlertEnabledValid; +- (FITBool)getMoveAlertEnabled; +- (void)setMoveAlertEnabled:(FITBool)moveAlertEnabled; +// DateMode +- (BOOL)isDateModeValid; +- (FITDateMode)getDateMode; +- (void)setDateMode:(FITDateMode)dateMode; +// DisplayOrientation +- (BOOL)isDisplayOrientationValid; +- (FITDisplayOrientation)getDisplayOrientation; +- (void)setDisplayOrientation:(FITDisplayOrientation)displayOrientation; +// MountingSide +- (BOOL)isMountingSideValid; +- (FITSide)getMountingSide; +- (void)setMountingSide:(FITSide)mountingSide; +// DefaultPage +@property(readonly,nonatomic) uint8_t numDefaultPageValues; +- (BOOL)isDefaultPageValidforIndex : (uint8_t)index; +- (FITUInt16)getDefaultPageforIndex : (uint8_t)index; +- (void)setDefaultPage:(FITUInt16)defaultPage forIndex:(uint8_t)index; +// AutosyncMinSteps +- (BOOL)isAutosyncMinStepsValid; +- (FITUInt16)getAutosyncMinSteps; +- (void)setAutosyncMinSteps:(FITUInt16)autosyncMinSteps; +// AutosyncMinTime +- (BOOL)isAutosyncMinTimeValid; +- (FITUInt16)getAutosyncMinTime; +- (void)setAutosyncMinTime:(FITUInt16)autosyncMinTime; +// LactateThresholdAutodetectEnabled +- (BOOL)isLactateThresholdAutodetectEnabledValid; +- (FITBool)getLactateThresholdAutodetectEnabled; +- (void)setLactateThresholdAutodetectEnabled:(FITBool)lactateThresholdAutodetectEnabled; +// BleAutoUploadEnabled +- (BOOL)isBleAutoUploadEnabledValid; +- (FITBool)getBleAutoUploadEnabled; +- (void)setBleAutoUploadEnabled:(FITBool)bleAutoUploadEnabled; +// AutoSyncFrequency +- (BOOL)isAutoSyncFrequencyValid; +- (FITAutoSyncFrequency)getAutoSyncFrequency; +- (void)setAutoSyncFrequency:(FITAutoSyncFrequency)autoSyncFrequency; +// AutoActivityDetect +- (BOOL)isAutoActivityDetectValid; +- (FITAutoActivityDetect)getAutoActivityDetect; +- (void)setAutoActivityDetect:(FITAutoActivityDetect)autoActivityDetect; +// NumberOfScreens +- (BOOL)isNumberOfScreensValid; +- (FITUInt8)getNumberOfScreens; +- (void)setNumberOfScreens:(FITUInt8)numberOfScreens; +// SmartNotificationDisplayOrientation +- (BOOL)isSmartNotificationDisplayOrientationValid; +- (FITDisplayOrientation)getSmartNotificationDisplayOrientation; +- (void)setSmartNotificationDisplayOrientation:(FITDisplayOrientation)smartNotificationDisplayOrientation; +// TapInterface +- (BOOL)isTapInterfaceValid; +- (FITSwitch)getTapInterface; +- (void)setTapInterface:(FITSwitch)tapInterface; +// TapSensitivity +- (BOOL)isTapSensitivityValid; +- (FITTapSensitivity)getTapSensitivity; +- (void)setTapSensitivity:(FITTapSensitivity)tapSensitivity; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDiveAlarmMesg.h b/Sources/ObjcFIT/include/FITDiveAlarmMesg.h new file mode 100644 index 0000000..af61b35 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDiveAlarmMesg.h @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDiveAlarmMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Depth +- (BOOL)isDepthValid; +- (FITFloat32)getDepth; +- (void)setDepth:(FITFloat32)depth; +// Time +- (BOOL)isTimeValid; +- (FITSInt32)getTime; +- (void)setTime:(FITSInt32)time; +// Enabled +- (BOOL)isEnabledValid; +- (FITBool)getEnabled; +- (void)setEnabled:(FITBool)enabled; +// AlarmType +- (BOOL)isAlarmTypeValid; +- (FITDiveAlarmType)getAlarmType; +- (void)setAlarmType:(FITDiveAlarmType)alarmType; +// Sound +- (BOOL)isSoundValid; +- (FITTone)getSound; +- (void)setSound:(FITTone)sound; +// DiveTypes +@property(readonly,nonatomic) uint8_t numDiveTypesValues; +- (BOOL)isDiveTypesValidforIndex : (uint8_t)index; +- (FITSubSport)getDiveTypesforIndex : (uint8_t)index; +- (void)setDiveTypes:(FITSubSport)diveTypes forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDiveGasMesg.h b/Sources/ObjcFIT/include/FITDiveGasMesg.h new file mode 100644 index 0000000..fae4fe4 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDiveGasMesg.h @@ -0,0 +1,41 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDiveGasMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// HeliumContent +- (BOOL)isHeliumContentValid; +- (FITUInt8)getHeliumContent; +- (void)setHeliumContent:(FITUInt8)heliumContent; +// OxygenContent +- (BOOL)isOxygenContentValid; +- (FITUInt8)getOxygenContent; +- (void)setOxygenContent:(FITUInt8)oxygenContent; +// Status +- (BOOL)isStatusValid; +- (FITDiveGasStatus)getStatus; +- (void)setStatus:(FITDiveGasStatus)status; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDiveSettingsMesg.h b/Sources/ObjcFIT/include/FITDiveSettingsMesg.h new file mode 100644 index 0000000..556244f --- /dev/null +++ b/Sources/ObjcFIT/include/FITDiveSettingsMesg.h @@ -0,0 +1,120 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDiveSettingsMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// Model +- (BOOL)isModelValid; +- (FITTissueModelType)getModel; +- (void)setModel:(FITTissueModelType)model; +// GfLow +- (BOOL)isGfLowValid; +- (FITUInt8)getGfLow; +- (void)setGfLow:(FITUInt8)gfLow; +// GfHigh +- (BOOL)isGfHighValid; +- (FITUInt8)getGfHigh; +- (void)setGfHigh:(FITUInt8)gfHigh; +// WaterType +- (BOOL)isWaterTypeValid; +- (FITWaterType)getWaterType; +- (void)setWaterType:(FITWaterType)waterType; +// WaterDensity +- (BOOL)isWaterDensityValid; +- (FITFloat32)getWaterDensity; +- (void)setWaterDensity:(FITFloat32)waterDensity; +// Po2Warn +- (BOOL)isPo2WarnValid; +- (FITFloat32)getPo2Warn; +- (void)setPo2Warn:(FITFloat32)po2Warn; +// Po2Critical +- (BOOL)isPo2CriticalValid; +- (FITFloat32)getPo2Critical; +- (void)setPo2Critical:(FITFloat32)po2Critical; +// Po2Deco +- (BOOL)isPo2DecoValid; +- (FITFloat32)getPo2Deco; +- (void)setPo2Deco:(FITFloat32)po2Deco; +// SafetyStopEnabled +- (BOOL)isSafetyStopEnabledValid; +- (FITBool)getSafetyStopEnabled; +- (void)setSafetyStopEnabled:(FITBool)safetyStopEnabled; +// BottomDepth +- (BOOL)isBottomDepthValid; +- (FITFloat32)getBottomDepth; +- (void)setBottomDepth:(FITFloat32)bottomDepth; +// BottomTime +- (BOOL)isBottomTimeValid; +- (FITUInt32)getBottomTime; +- (void)setBottomTime:(FITUInt32)bottomTime; +// ApneaCountdownEnabled +- (BOOL)isApneaCountdownEnabledValid; +- (FITBool)getApneaCountdownEnabled; +- (void)setApneaCountdownEnabled:(FITBool)apneaCountdownEnabled; +// ApneaCountdownTime +- (BOOL)isApneaCountdownTimeValid; +- (FITUInt32)getApneaCountdownTime; +- (void)setApneaCountdownTime:(FITUInt32)apneaCountdownTime; +// BacklightMode +- (BOOL)isBacklightModeValid; +- (FITDiveBacklightMode)getBacklightMode; +- (void)setBacklightMode:(FITDiveBacklightMode)backlightMode; +// BacklightBrightness +- (BOOL)isBacklightBrightnessValid; +- (FITUInt8)getBacklightBrightness; +- (void)setBacklightBrightness:(FITUInt8)backlightBrightness; +// BacklightTimeout +- (BOOL)isBacklightTimeoutValid; +- (FITBacklightTimeout)getBacklightTimeout; +- (void)setBacklightTimeout:(FITBacklightTimeout)backlightTimeout; +// RepeatDiveInterval +- (BOOL)isRepeatDiveIntervalValid; +- (FITUInt16)getRepeatDiveInterval; +- (void)setRepeatDiveInterval:(FITUInt16)repeatDiveInterval; +// SafetyStopTime +- (BOOL)isSafetyStopTimeValid; +- (FITUInt16)getSafetyStopTime; +- (void)setSafetyStopTime:(FITUInt16)safetyStopTime; +// HeartRateSourceType +- (BOOL)isHeartRateSourceTypeValid; +- (FITSourceType)getHeartRateSourceType; +- (void)setHeartRateSourceType:(FITSourceType)heartRateSourceType; +// HeartRateSource +- (BOOL)isHeartRateSourceValid; +- (FITUInt8)getHeartRateSource; +- (void)setHeartRateSource:(FITUInt8)heartRateSource; +// HeartRateSource Sub Fields +- (BOOL)isHeartRateAntplusDeviceTypeValid; +- (FITAntplusDeviceType) getHeartRateAntplusDeviceType; +- (void)setHeartRateAntplusDeviceType:(FITAntplusDeviceType)heartRateAntplusDeviceType; +- (BOOL)isHeartRateLocalDeviceTypeValid; +- (FITLocalDeviceType) getHeartRateLocalDeviceType; +- (void)setHeartRateLocalDeviceType:(FITLocalDeviceType)heartRateLocalDeviceType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITDiveSummaryMesg.h b/Sources/ObjcFIT/include/FITDiveSummaryMesg.h new file mode 100644 index 0000000..59a89d9 --- /dev/null +++ b/Sources/ObjcFIT/include/FITDiveSummaryMesg.h @@ -0,0 +1,98 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITDiveSummaryMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// ReferenceMesg +- (BOOL)isReferenceMesgValid; +- (FITMesgNum)getReferenceMesg; +- (void)setReferenceMesg:(FITMesgNum)referenceMesg; +// ReferenceIndex +- (BOOL)isReferenceIndexValid; +- (FITMessageIndex)getReferenceIndex; +- (void)setReferenceIndex:(FITMessageIndex)referenceIndex; +// AvgDepth +- (BOOL)isAvgDepthValid; +- (FITFloat32)getAvgDepth; +- (void)setAvgDepth:(FITFloat32)avgDepth; +// MaxDepth +- (BOOL)isMaxDepthValid; +- (FITFloat32)getMaxDepth; +- (void)setMaxDepth:(FITFloat32)maxDepth; +// SurfaceInterval +- (BOOL)isSurfaceIntervalValid; +- (FITUInt32)getSurfaceInterval; +- (void)setSurfaceInterval:(FITUInt32)surfaceInterval; +// StartCns +- (BOOL)isStartCnsValid; +- (FITUInt8)getStartCns; +- (void)setStartCns:(FITUInt8)startCns; +// EndCns +- (BOOL)isEndCnsValid; +- (FITUInt8)getEndCns; +- (void)setEndCns:(FITUInt8)endCns; +// StartN2 +- (BOOL)isStartN2Valid; +- (FITUInt16)getStartN2; +- (void)setStartN2:(FITUInt16)startN2; +// EndN2 +- (BOOL)isEndN2Valid; +- (FITUInt16)getEndN2; +- (void)setEndN2:(FITUInt16)endN2; +// O2Toxicity +- (BOOL)isO2ToxicityValid; +- (FITUInt16)getO2Toxicity; +- (void)setO2Toxicity:(FITUInt16)o2Toxicity; +// DiveNumber +- (BOOL)isDiveNumberValid; +- (FITUInt32)getDiveNumber; +- (void)setDiveNumber:(FITUInt32)diveNumber; +// BottomTime +- (BOOL)isBottomTimeValid; +- (FITFloat32)getBottomTime; +- (void)setBottomTime:(FITFloat32)bottomTime; +// AvgAscentRate +- (BOOL)isAvgAscentRateValid; +- (FITFloat32)getAvgAscentRate; +- (void)setAvgAscentRate:(FITFloat32)avgAscentRate; +// AvgDescentRate +- (BOOL)isAvgDescentRateValid; +- (FITFloat32)getAvgDescentRate; +- (void)setAvgDescentRate:(FITFloat32)avgDescentRate; +// MaxAscentRate +- (BOOL)isMaxAscentRateValid; +- (FITFloat32)getMaxAscentRate; +- (void)setMaxAscentRate:(FITFloat32)maxAscentRate; +// MaxDescentRate +- (BOOL)isMaxDescentRateValid; +- (FITFloat32)getMaxDescentRate; +- (void)setMaxDescentRate:(FITFloat32)maxDescentRate; +// HangTime +- (BOOL)isHangTimeValid; +- (FITFloat32)getHangTime; +- (void)setHangTime:(FITFloat32)hangTime; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITEncoder.h b/Sources/ObjcFIT/include/FITEncoder.h new file mode 100644 index 0000000..8241419 --- /dev/null +++ b/Sources/ObjcFIT/include/FITEncoder.h @@ -0,0 +1,36 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSUInteger, FITProtocolVersion) { + FITProtocolVersionV10, + FITProtocolVersionV20 +}; + +@interface FITEncoder : NSObject + +- (instancetype)initWithVersion:(FITProtocolVersion)version NS_DESIGNATED_INITIALIZER; +- (instancetype)init NS_UNAVAILABLE; + +- (BOOL)open:(NSString *)filename; +- (void)writeMessage:(FITMessage *)mesg; +- (void)writeMessages:(NSArray*)mesgs; +- (BOOL)close; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITEventMesg.h b/Sources/ObjcFIT/include/FITEventMesg.h new file mode 100644 index 0000000..960567b --- /dev/null +++ b/Sources/ObjcFIT/include/FITEventMesg.h @@ -0,0 +1,158 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITEventMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Event +- (BOOL)isEventValid; +- (FITEvent)getEvent; +- (void)setEvent:(FITEvent)event; +// EventType +- (BOOL)isEventTypeValid; +- (FITEventType)getEventType; +- (void)setEventType:(FITEventType)eventType; +// Data16 +- (BOOL)isData16Valid; +- (FITUInt16)getData16; +- (void)setData16:(FITUInt16)data16; +// Data +- (BOOL)isDataValid; +- (FITUInt32)getData; +- (void)setData:(FITUInt32)data; +// Data Sub Fields +- (BOOL)isTimerTriggerValid; +- (FITTimerTrigger) getTimerTrigger; +- (void)setTimerTrigger:(FITTimerTrigger)timerTrigger; +- (BOOL)isCoursePointIndexValid; +- (FITMessageIndex) getCoursePointIndex; +- (void)setCoursePointIndex:(FITMessageIndex)coursePointIndex; +- (BOOL)isBatteryLevelValid; +- (FITFloat32) getBatteryLevel; +- (void)setBatteryLevel:(FITFloat32)batteryLevel; +- (BOOL)isVirtualPartnerSpeedValid; +- (FITFloat32) getVirtualPartnerSpeed; +- (void)setVirtualPartnerSpeed:(FITFloat32)virtualPartnerSpeed; +- (BOOL)isHrHighAlertValid; +- (FITUInt8) getHrHighAlert; +- (void)setHrHighAlert:(FITUInt8)hrHighAlert; +- (BOOL)isHrLowAlertValid; +- (FITUInt8) getHrLowAlert; +- (void)setHrLowAlert:(FITUInt8)hrLowAlert; +- (BOOL)isSpeedHighAlertValid; +- (FITFloat32) getSpeedHighAlert; +- (void)setSpeedHighAlert:(FITFloat32)speedHighAlert; +- (BOOL)isSpeedLowAlertValid; +- (FITFloat32) getSpeedLowAlert; +- (void)setSpeedLowAlert:(FITFloat32)speedLowAlert; +- (BOOL)isCadHighAlertValid; +- (FITUInt16) getCadHighAlert; +- (void)setCadHighAlert:(FITUInt16)cadHighAlert; +- (BOOL)isCadLowAlertValid; +- (FITUInt16) getCadLowAlert; +- (void)setCadLowAlert:(FITUInt16)cadLowAlert; +- (BOOL)isPowerHighAlertValid; +- (FITUInt16) getPowerHighAlert; +- (void)setPowerHighAlert:(FITUInt16)powerHighAlert; +- (BOOL)isPowerLowAlertValid; +- (FITUInt16) getPowerLowAlert; +- (void)setPowerLowAlert:(FITUInt16)powerLowAlert; +- (BOOL)isTimeDurationAlertValid; +- (FITFloat32) getTimeDurationAlert; +- (void)setTimeDurationAlert:(FITFloat32)timeDurationAlert; +- (BOOL)isDistanceDurationAlertValid; +- (FITFloat32) getDistanceDurationAlert; +- (void)setDistanceDurationAlert:(FITFloat32)distanceDurationAlert; +- (BOOL)isCalorieDurationAlertValid; +- (FITUInt32) getCalorieDurationAlert; +- (void)setCalorieDurationAlert:(FITUInt32)calorieDurationAlert; +- (BOOL)isFitnessEquipmentStateValid; +- (FITFitnessEquipmentState) getFitnessEquipmentState; +- (void)setFitnessEquipmentState:(FITFitnessEquipmentState)fitnessEquipmentState; +- (BOOL)isSportPointValid; +- (FITUInt32) getSportPoint; +- (void)setSportPoint:(FITUInt32)sportPoint; +- (BOOL)isGearChangeDataValid; +- (FITUInt32) getGearChangeData; +- (void)setGearChangeData:(FITUInt32)gearChangeData; +- (BOOL)isRiderPositionValid; +- (FITRiderPositionType) getRiderPosition; +- (void)setRiderPosition:(FITRiderPositionType)riderPosition; +- (BOOL)isCommTimeoutValid; +- (FITCommTimeoutType) getCommTimeout; +- (void)setCommTimeout:(FITCommTimeoutType)commTimeout; +- (BOOL)isRadarThreatAlertValid; +- (FITUInt32) getRadarThreatAlert; +- (void)setRadarThreatAlert:(FITUInt32)radarThreatAlert; +// EventGroup +- (BOOL)isEventGroupValid; +- (FITUInt8)getEventGroup; +- (void)setEventGroup:(FITUInt8)eventGroup; +// Score +- (BOOL)isScoreValid; +- (FITUInt16)getScore; +- (void)setScore:(FITUInt16)score; +// OpponentScore +- (BOOL)isOpponentScoreValid; +- (FITUInt16)getOpponentScore; +- (void)setOpponentScore:(FITUInt16)opponentScore; +// FrontGearNum +- (BOOL)isFrontGearNumValid; +- (FITUInt8z)getFrontGearNum; +- (void)setFrontGearNum:(FITUInt8z)frontGearNum; +// FrontGear +- (BOOL)isFrontGearValid; +- (FITUInt8z)getFrontGear; +- (void)setFrontGear:(FITUInt8z)frontGear; +// RearGearNum +- (BOOL)isRearGearNumValid; +- (FITUInt8z)getRearGearNum; +- (void)setRearGearNum:(FITUInt8z)rearGearNum; +// RearGear +- (BOOL)isRearGearValid; +- (FITUInt8z)getRearGear; +- (void)setRearGear:(FITUInt8z)rearGear; +// DeviceIndex +- (BOOL)isDeviceIndexValid; +- (FITDeviceIndex)getDeviceIndex; +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex; +// RadarThreatLevelMax +- (BOOL)isRadarThreatLevelMaxValid; +- (FITRadarThreatLevelType)getRadarThreatLevelMax; +- (void)setRadarThreatLevelMax:(FITRadarThreatLevelType)radarThreatLevelMax; +// RadarThreatCount +- (BOOL)isRadarThreatCountValid; +- (FITUInt8)getRadarThreatCount; +- (void)setRadarThreatCount:(FITUInt8)radarThreatCount; +// RadarThreatAvgApproachSpeed +- (BOOL)isRadarThreatAvgApproachSpeedValid; +- (FITFloat32)getRadarThreatAvgApproachSpeed; +- (void)setRadarThreatAvgApproachSpeed:(FITFloat32)radarThreatAvgApproachSpeed; +// RadarThreatMaxApproachSpeed +- (BOOL)isRadarThreatMaxApproachSpeedValid; +- (FITFloat32)getRadarThreatMaxApproachSpeed; +- (void)setRadarThreatMaxApproachSpeed:(FITFloat32)radarThreatMaxApproachSpeed; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITExdDataConceptConfigurationMesg.h b/Sources/ObjcFIT/include/FITExdDataConceptConfigurationMesg.h new file mode 100644 index 0000000..adfd8f7 --- /dev/null +++ b/Sources/ObjcFIT/include/FITExdDataConceptConfigurationMesg.h @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITExdDataConceptConfigurationMesg : FITMessage +- (id)init; +// ScreenIndex +- (BOOL)isScreenIndexValid; +- (FITUInt8)getScreenIndex; +- (void)setScreenIndex:(FITUInt8)screenIndex; +// ConceptField +- (BOOL)isConceptFieldValid; +- (FITByte)getConceptField; +- (void)setConceptField:(FITByte)conceptField; +// FieldId +- (BOOL)isFieldIdValid; +- (FITUInt8)getFieldId; +- (void)setFieldId:(FITUInt8)fieldId; +// ConceptIndex +- (BOOL)isConceptIndexValid; +- (FITUInt8)getConceptIndex; +- (void)setConceptIndex:(FITUInt8)conceptIndex; +// DataPage +- (BOOL)isDataPageValid; +- (FITUInt8)getDataPage; +- (void)setDataPage:(FITUInt8)dataPage; +// ConceptKey +- (BOOL)isConceptKeyValid; +- (FITUInt8)getConceptKey; +- (void)setConceptKey:(FITUInt8)conceptKey; +// Scaling +- (BOOL)isScalingValid; +- (FITUInt8)getScaling; +- (void)setScaling:(FITUInt8)scaling; +// DataUnits +- (BOOL)isDataUnitsValid; +- (FITExdDataUnits)getDataUnits; +- (void)setDataUnits:(FITExdDataUnits)dataUnits; +// Qualifier +- (BOOL)isQualifierValid; +- (FITExdQualifiers)getQualifier; +- (void)setQualifier:(FITExdQualifiers)qualifier; +// Descriptor +- (BOOL)isDescriptorValid; +- (FITExdDescriptors)getDescriptor; +- (void)setDescriptor:(FITExdDescriptors)descriptor; +// IsSigned +- (BOOL)isIsSignedValid; +- (FITBool)getIsSigned; +- (void)setIsSigned:(FITBool)isSigned; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITExdDataFieldConfigurationMesg.h b/Sources/ObjcFIT/include/FITExdDataFieldConfigurationMesg.h new file mode 100644 index 0000000..69c3517 --- /dev/null +++ b/Sources/ObjcFIT/include/FITExdDataFieldConfigurationMesg.h @@ -0,0 +1,50 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITExdDataFieldConfigurationMesg : FITMessage +- (id)init; +// ScreenIndex +- (BOOL)isScreenIndexValid; +- (FITUInt8)getScreenIndex; +- (void)setScreenIndex:(FITUInt8)screenIndex; +// ConceptField +- (BOOL)isConceptFieldValid; +- (FITByte)getConceptField; +- (void)setConceptField:(FITByte)conceptField; +// FieldId +- (BOOL)isFieldIdValid; +- (FITUInt8)getFieldId; +- (void)setFieldId:(FITUInt8)fieldId; +// ConceptCount +- (BOOL)isConceptCountValid; +- (FITUInt8)getConceptCount; +- (void)setConceptCount:(FITUInt8)conceptCount; +// DisplayType +- (BOOL)isDisplayTypeValid; +- (FITExdDisplayType)getDisplayType; +- (void)setDisplayType:(FITExdDisplayType)displayType; +// Title +@property(readonly,nonatomic) uint8_t numTitleValues; +- (BOOL)isTitleValidforIndex : (uint8_t)index; +- (NSString *)getTitleforIndex : (uint8_t)index; +- (void)setTitle:(NSString *)title forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITExdScreenConfigurationMesg.h b/Sources/ObjcFIT/include/FITExdScreenConfigurationMesg.h new file mode 100644 index 0000000..c830ec4 --- /dev/null +++ b/Sources/ObjcFIT/include/FITExdScreenConfigurationMesg.h @@ -0,0 +1,41 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITExdScreenConfigurationMesg : FITMessage +- (id)init; +// ScreenIndex +- (BOOL)isScreenIndexValid; +- (FITUInt8)getScreenIndex; +- (void)setScreenIndex:(FITUInt8)screenIndex; +// FieldCount +- (BOOL)isFieldCountValid; +- (FITUInt8)getFieldCount; +- (void)setFieldCount:(FITUInt8)fieldCount; +// Layout +- (BOOL)isLayoutValid; +- (FITExdLayout)getLayout; +- (void)setLayout:(FITExdLayout)layout; +// ScreenEnabled +- (BOOL)isScreenEnabledValid; +- (FITBool)getScreenEnabled; +- (void)setScreenEnabled:(FITBool)screenEnabled; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITExerciseTitleMesg.h b/Sources/ObjcFIT/include/FITExerciseTitleMesg.h new file mode 100644 index 0000000..2275d87 --- /dev/null +++ b/Sources/ObjcFIT/include/FITExerciseTitleMesg.h @@ -0,0 +1,42 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITExerciseTitleMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// ExerciseCategory +- (BOOL)isExerciseCategoryValid; +- (FITExerciseCategory)getExerciseCategory; +- (void)setExerciseCategory:(FITExerciseCategory)exerciseCategory; +// ExerciseName +- (BOOL)isExerciseNameValid; +- (FITUInt16)getExerciseName; +- (void)setExerciseName:(FITUInt16)exerciseName; +// WktStepName +@property(readonly,nonatomic) uint8_t numWktStepNameValues; +- (BOOL)isWktStepNameValidforIndex : (uint8_t)index; +- (NSString *)getWktStepNameforIndex : (uint8_t)index; +- (void)setWktStepName:(NSString *)wktStepName forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITFieldCapabilitiesMesg.h b/Sources/ObjcFIT/include/FITFieldCapabilitiesMesg.h new file mode 100644 index 0000000..394a5b1 --- /dev/null +++ b/Sources/ObjcFIT/include/FITFieldCapabilitiesMesg.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITFieldCapabilitiesMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// File +- (BOOL)isFileValid; +- (FITFile)getFile; +- (void)setFile:(FITFile)file; +// MesgNum +- (BOOL)isMesgNumValid; +- (FITMesgNum)getMesgNum; +- (void)setMesgNum:(FITMesgNum)mesgNum; +// FieldNum +- (BOOL)isFieldNumValid; +- (FITUInt8)getFieldNum; +- (void)setFieldNum:(FITUInt8)fieldNum; +// Count +- (BOOL)isCountValid; +- (FITUInt16)getCount; +- (void)setCount:(FITUInt16)count; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITFieldDescriptionMesg.h b/Sources/ObjcFIT/include/FITFieldDescriptionMesg.h new file mode 100644 index 0000000..34a0280 --- /dev/null +++ b/Sources/ObjcFIT/include/FITFieldDescriptionMesg.h @@ -0,0 +1,83 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITFieldDescriptionMesg : FITMessage +- (id)init; +// DeveloperDataIndex +- (BOOL)isDeveloperDataIndexValid; +- (FITUInt8)getDeveloperDataIndex; +- (void)setDeveloperDataIndex:(FITUInt8)developerDataIndex; +// FieldDefinitionNumber +- (BOOL)isFieldDefinitionNumberValid; +- (FITUInt8)getFieldDefinitionNumber; +- (void)setFieldDefinitionNumber:(FITUInt8)fieldDefinitionNumber; +// FitBaseTypeId +- (BOOL)isFitBaseTypeIdValid; +- (FITFitBaseType)getFitBaseTypeId; +- (void)setFitBaseTypeId:(FITFitBaseType)fitBaseTypeId; +// FieldName +@property(readonly,nonatomic) uint8_t numFieldNameValues; +- (BOOL)isFieldNameValidforIndex : (uint8_t)index; +- (NSString *)getFieldNameforIndex : (uint8_t)index; +- (void)setFieldName:(NSString *)fieldName forIndex:(uint8_t)index; +// Array +- (BOOL)isArrayValid; +- (FITUInt8)getArray; +- (void)setArray:(FITUInt8)array; +// Components +- (BOOL)isComponentsValid; +- (NSString *)getComponents; +- (void)setComponents:(NSString *)components; +// Scale +- (BOOL)isScaleValid; +- (FITUInt8)getScale; +- (void)setScale:(FITUInt8)scale; +// Offset +- (BOOL)isOffsetValid; +- (FITSInt8)getOffset; +- (void)setOffset:(FITSInt8)offset; +// Units +@property(readonly,nonatomic) uint8_t numUnitsValues; +- (BOOL)isUnitsValidforIndex : (uint8_t)index; +- (NSString *)getUnitsforIndex : (uint8_t)index; +- (void)setUnits:(NSString *)units forIndex:(uint8_t)index; +// Bits +- (BOOL)isBitsValid; +- (NSString *)getBits; +- (void)setBits:(NSString *)bits; +// Accumulate +- (BOOL)isAccumulateValid; +- (NSString *)getAccumulate; +- (void)setAccumulate:(NSString *)accumulate; +// FitBaseUnitId +- (BOOL)isFitBaseUnitIdValid; +- (FITFitBaseUnit)getFitBaseUnitId; +- (void)setFitBaseUnitId:(FITFitBaseUnit)fitBaseUnitId; +// NativeMesgNum +- (BOOL)isNativeMesgNumValid; +- (FITMesgNum)getNativeMesgNum; +- (void)setNativeMesgNum:(FITMesgNum)nativeMesgNum; +// NativeFieldNum +- (BOOL)isNativeFieldNumValid; +- (FITUInt8)getNativeFieldNum; +- (void)setNativeFieldNum:(FITUInt8)nativeFieldNum; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITFileCapabilitiesMesg.h b/Sources/ObjcFIT/include/FITFileCapabilitiesMesg.h new file mode 100644 index 0000000..fca0e24 --- /dev/null +++ b/Sources/ObjcFIT/include/FITFileCapabilitiesMesg.h @@ -0,0 +1,49 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITFileCapabilitiesMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Type +- (BOOL)isTypeValid; +- (FITFile)getType; +- (void)setType:(FITFile)type; +// Flags +- (BOOL)isFlagsValid; +- (FITFileFlags)getFlags; +- (void)setFlags:(FITFileFlags)flags; +// Directory +- (BOOL)isDirectoryValid; +- (NSString *)getDirectory; +- (void)setDirectory:(NSString *)directory; +// MaxCount +- (BOOL)isMaxCountValid; +- (FITUInt16)getMaxCount; +- (void)setMaxCount:(FITUInt16)maxCount; +// MaxSize +- (BOOL)isMaxSizeValid; +- (FITUInt32)getMaxSize; +- (void)setMaxSize:(FITUInt32)maxSize; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITFileCreatorMesg.h b/Sources/ObjcFIT/include/FITFileCreatorMesg.h new file mode 100644 index 0000000..e2e5842 --- /dev/null +++ b/Sources/ObjcFIT/include/FITFileCreatorMesg.h @@ -0,0 +1,33 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITFileCreatorMesg : FITMessage +- (id)init; +// SoftwareVersion +- (BOOL)isSoftwareVersionValid; +- (FITUInt16)getSoftwareVersion; +- (void)setSoftwareVersion:(FITUInt16)softwareVersion; +// HardwareVersion +- (BOOL)isHardwareVersionValid; +- (FITUInt8)getHardwareVersion; +- (void)setHardwareVersion:(FITUInt8)hardwareVersion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITFileIdMesg.h b/Sources/ObjcFIT/include/FITFileIdMesg.h new file mode 100644 index 0000000..80681bb --- /dev/null +++ b/Sources/ObjcFIT/include/FITFileIdMesg.h @@ -0,0 +1,61 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITFileIdMesg : FITMessage +- (id)init; +// Type +- (BOOL)isTypeValid; +- (FITFile)getType; +- (void)setType:(FITFile)type; +// Manufacturer +- (BOOL)isManufacturerValid; +- (FITManufacturer)getManufacturer; +- (void)setManufacturer:(FITManufacturer)manufacturer; +// Product +- (BOOL)isProductValid; +- (FITUInt16)getProduct; +- (void)setProduct:(FITUInt16)product; +// Product Sub Fields +- (BOOL)isFaveroProductValid; +- (FITFaveroProduct) getFaveroProduct; +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct; +- (BOOL)isGarminProductValid; +- (FITGarminProduct) getGarminProduct; +- (void)setGarminProduct:(FITGarminProduct)garminProduct; +// SerialNumber +- (BOOL)isSerialNumberValid; +- (FITUInt32z)getSerialNumber; +- (void)setSerialNumber:(FITUInt32z)serialNumber; +// TimeCreated +- (BOOL)isTimeCreatedValid; +- (FITDate *)getTimeCreated; +- (void)setTimeCreated:(FITDate *)timeCreated; +// Number +- (BOOL)isNumberValid; +- (FITUInt16)getNumber; +- (void)setNumber:(FITUInt16)number; +// ProductName +- (BOOL)isProductNameValid; +- (NSString *)getProductName; +- (void)setProductName:(NSString *)productName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITGoalMesg.h b/Sources/ObjcFIT/include/FITGoalMesg.h new file mode 100644 index 0000000..b43bcb1 --- /dev/null +++ b/Sources/ObjcFIT/include/FITGoalMesg.h @@ -0,0 +1,78 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITGoalMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// StartDate +- (BOOL)isStartDateValid; +- (FITDate *)getStartDate; +- (void)setStartDate:(FITDate *)startDate; +// EndDate +- (BOOL)isEndDateValid; +- (FITDate *)getEndDate; +- (void)setEndDate:(FITDate *)endDate; +// Type +- (BOOL)isTypeValid; +- (FITGoal)getType; +- (void)setType:(FITGoal)type; +// Value +- (BOOL)isValueValid; +- (FITUInt32)getValue; +- (void)setValue:(FITUInt32)value; +// Repeat +- (BOOL)isRepeatValid; +- (FITBool)getRepeat; +- (void)setRepeat:(FITBool)repeat; +// TargetValue +- (BOOL)isTargetValueValid; +- (FITUInt32)getTargetValue; +- (void)setTargetValue:(FITUInt32)targetValue; +// Recurrence +- (BOOL)isRecurrenceValid; +- (FITGoalRecurrence)getRecurrence; +- (void)setRecurrence:(FITGoalRecurrence)recurrence; +// RecurrenceValue +- (BOOL)isRecurrenceValueValid; +- (FITUInt16)getRecurrenceValue; +- (void)setRecurrenceValue:(FITUInt16)recurrenceValue; +// Enabled +- (BOOL)isEnabledValid; +- (FITBool)getEnabled; +- (void)setEnabled:(FITBool)enabled; +// Source +- (BOOL)isSourceValid; +- (FITGoalSource)getSource; +- (void)setSource:(FITGoalSource)source; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITGpsMetadataMesg.h b/Sources/ObjcFIT/include/FITGpsMetadataMesg.h new file mode 100644 index 0000000..ebccb2c --- /dev/null +++ b/Sources/ObjcFIT/include/FITGpsMetadataMesg.h @@ -0,0 +1,63 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITGpsMetadataMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// PositionLat +- (BOOL)isPositionLatValid; +- (FITSInt32)getPositionLat; +- (void)setPositionLat:(FITSInt32)positionLat; +// PositionLong +- (BOOL)isPositionLongValid; +- (FITSInt32)getPositionLong; +- (void)setPositionLong:(FITSInt32)positionLong; +// EnhancedAltitude +- (BOOL)isEnhancedAltitudeValid; +- (FITFloat32)getEnhancedAltitude; +- (void)setEnhancedAltitude:(FITFloat32)enhancedAltitude; +// EnhancedSpeed +- (BOOL)isEnhancedSpeedValid; +- (FITFloat32)getEnhancedSpeed; +- (void)setEnhancedSpeed:(FITFloat32)enhancedSpeed; +// Heading +- (BOOL)isHeadingValid; +- (FITFloat32)getHeading; +- (void)setHeading:(FITFloat32)heading; +// UtcTimestamp +- (BOOL)isUtcTimestampValid; +- (FITDate *)getUtcTimestamp; +- (void)setUtcTimestamp:(FITDate *)utcTimestamp; +// Velocity +@property(readonly,nonatomic) uint8_t numVelocityValues; +- (BOOL)isVelocityValidforIndex : (uint8_t)index; +- (FITFloat32)getVelocityforIndex : (uint8_t)index; +- (void)setVelocity:(FITFloat32)velocity forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITGyroscopeDataMesg.h b/Sources/ObjcFIT/include/FITGyroscopeDataMesg.h new file mode 100644 index 0000000..7d1b51b --- /dev/null +++ b/Sources/ObjcFIT/include/FITGyroscopeDataMesg.h @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITGyroscopeDataMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// SampleTimeOffset +@property(readonly,nonatomic) uint8_t numSampleTimeOffsetValues; +- (BOOL)isSampleTimeOffsetValidforIndex : (uint8_t)index; +- (FITUInt16)getSampleTimeOffsetforIndex : (uint8_t)index; +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index; +// GyroX +@property(readonly,nonatomic) uint8_t numGyroXValues; +- (BOOL)isGyroXValidforIndex : (uint8_t)index; +- (FITUInt16)getGyroXforIndex : (uint8_t)index; +- (void)setGyroX:(FITUInt16)gyroX forIndex:(uint8_t)index; +// GyroY +@property(readonly,nonatomic) uint8_t numGyroYValues; +- (BOOL)isGyroYValidforIndex : (uint8_t)index; +- (FITUInt16)getGyroYforIndex : (uint8_t)index; +- (void)setGyroY:(FITUInt16)gyroY forIndex:(uint8_t)index; +// GyroZ +@property(readonly,nonatomic) uint8_t numGyroZValues; +- (BOOL)isGyroZValidforIndex : (uint8_t)index; +- (FITUInt16)getGyroZforIndex : (uint8_t)index; +- (void)setGyroZ:(FITUInt16)gyroZ forIndex:(uint8_t)index; +// CalibratedGyroX +@property(readonly,nonatomic) uint8_t numCalibratedGyroXValues; +- (BOOL)isCalibratedGyroXValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedGyroXforIndex : (uint8_t)index; +- (void)setCalibratedGyroX:(FITFloat32)calibratedGyroX forIndex:(uint8_t)index; +// CalibratedGyroY +@property(readonly,nonatomic) uint8_t numCalibratedGyroYValues; +- (BOOL)isCalibratedGyroYValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedGyroYforIndex : (uint8_t)index; +- (void)setCalibratedGyroY:(FITFloat32)calibratedGyroY forIndex:(uint8_t)index; +// CalibratedGyroZ +@property(readonly,nonatomic) uint8_t numCalibratedGyroZValues; +- (BOOL)isCalibratedGyroZValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedGyroZforIndex : (uint8_t)index; +- (void)setCalibratedGyroZ:(FITFloat32)calibratedGyroZ forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITHrMesg.h b/Sources/ObjcFIT/include/FITHrMesg.h new file mode 100644 index 0000000..ad12afc --- /dev/null +++ b/Sources/ObjcFIT/include/FITHrMesg.h @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITHrMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid; +- (FITFloat32)getFractionalTimestamp; +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp; +// Time256 +- (BOOL)isTime256Valid; +- (FITFloat32)getTime256; +- (void)setTime256:(FITFloat32)time256; +// FilteredBpm +@property(readonly,nonatomic) uint8_t numFilteredBpmValues; +- (BOOL)isFilteredBpmValidforIndex : (uint8_t)index; +- (FITUInt8)getFilteredBpmforIndex : (uint8_t)index; +- (void)setFilteredBpm:(FITUInt8)filteredBpm forIndex:(uint8_t)index; +// EventTimestamp +@property(readonly,nonatomic) uint8_t numEventTimestampValues; +- (BOOL)isEventTimestampValidforIndex : (uint8_t)index; +- (FITFloat32)getEventTimestampforIndex : (uint8_t)index; +- (void)setEventTimestamp:(FITFloat32)eventTimestamp forIndex:(uint8_t)index; +// EventTimestamp12 +@property(readonly,nonatomic) uint8_t numEventTimestamp12Values; +- (BOOL)isEventTimestamp12ValidforIndex : (uint8_t)index; +- (FITByte)getEventTimestamp12forIndex : (uint8_t)index; +- (void)setEventTimestamp12:(FITByte)eventTimestamp12 forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITHrZoneMesg.h b/Sources/ObjcFIT/include/FITHrZoneMesg.h new file mode 100644 index 0000000..07f3b3e --- /dev/null +++ b/Sources/ObjcFIT/include/FITHrZoneMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITHrZoneMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// HighBpm +- (BOOL)isHighBpmValid; +- (FITUInt8)getHighBpm; +- (void)setHighBpm:(FITUInt8)highBpm; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITHrmProfileMesg.h b/Sources/ObjcFIT/include/FITHrmProfileMesg.h new file mode 100644 index 0000000..6d550e6 --- /dev/null +++ b/Sources/ObjcFIT/include/FITHrmProfileMesg.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITHrmProfileMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Enabled +- (BOOL)isEnabledValid; +- (FITBool)getEnabled; +- (void)setEnabled:(FITBool)enabled; +// HrmAntId +- (BOOL)isHrmAntIdValid; +- (FITUInt16z)getHrmAntId; +- (void)setHrmAntId:(FITUInt16z)hrmAntId; +// LogHrv +- (BOOL)isLogHrvValid; +- (FITBool)getLogHrv; +- (void)setLogHrv:(FITBool)logHrv; +// HrmAntIdTransType +- (BOOL)isHrmAntIdTransTypeValid; +- (FITUInt8z)getHrmAntIdTransType; +- (void)setHrmAntIdTransType:(FITUInt8z)hrmAntIdTransType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITHrvMesg.h b/Sources/ObjcFIT/include/FITHrvMesg.h new file mode 100644 index 0000000..4d5f476 --- /dev/null +++ b/Sources/ObjcFIT/include/FITHrvMesg.h @@ -0,0 +1,30 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITHrvMesg : FITMessage +- (id)init; +// Time +@property(readonly,nonatomic) uint8_t numTimeValues; +- (BOOL)isTimeValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeforIndex : (uint8_t)index; +- (void)setTime:(FITFloat32)time forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITJumpMesg.h b/Sources/ObjcFIT/include/FITJumpMesg.h new file mode 100644 index 0000000..0132250 --- /dev/null +++ b/Sources/ObjcFIT/include/FITJumpMesg.h @@ -0,0 +1,66 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITJumpMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Distance +- (BOOL)isDistanceValid; +- (FITFloat32)getDistance; +- (void)setDistance:(FITFloat32)distance; +// Height +- (BOOL)isHeightValid; +- (FITFloat32)getHeight; +- (void)setHeight:(FITFloat32)height; +// Rotations +- (BOOL)isRotationsValid; +- (FITUInt8)getRotations; +- (void)setRotations:(FITUInt8)rotations; +// HangTime +- (BOOL)isHangTimeValid; +- (FITFloat32)getHangTime; +- (void)setHangTime:(FITFloat32)hangTime; +// Score +- (BOOL)isScoreValid; +- (FITFloat32)getScore; +- (void)setScore:(FITFloat32)score; +// PositionLat +- (BOOL)isPositionLatValid; +- (FITSInt32)getPositionLat; +- (void)setPositionLat:(FITSInt32)positionLat; +// PositionLong +- (BOOL)isPositionLongValid; +- (FITSInt32)getPositionLong; +- (void)setPositionLong:(FITSInt32)positionLong; +// Speed +- (BOOL)isSpeedValid; +- (FITFloat32)getSpeed; +- (void)setSpeed:(FITFloat32)speed; +// EnhancedSpeed +- (BOOL)isEnhancedSpeedValid; +- (FITFloat32)getEnhancedSpeed; +- (void)setEnhancedSpeed:(FITFloat32)enhancedSpeed; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITLapMesg.h b/Sources/ObjcFIT/include/FITLapMesg.h new file mode 100644 index 0000000..13ebe02 --- /dev/null +++ b/Sources/ObjcFIT/include/FITLapMesg.h @@ -0,0 +1,525 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITLapMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Event +- (BOOL)isEventValid; +- (FITEvent)getEvent; +- (void)setEvent:(FITEvent)event; +// EventType +- (BOOL)isEventTypeValid; +- (FITEventType)getEventType; +- (void)setEventType:(FITEventType)eventType; +// StartTime +- (BOOL)isStartTimeValid; +- (FITDate *)getStartTime; +- (void)setStartTime:(FITDate *)startTime; +// StartPositionLat +- (BOOL)isStartPositionLatValid; +- (FITSInt32)getStartPositionLat; +- (void)setStartPositionLat:(FITSInt32)startPositionLat; +// StartPositionLong +- (BOOL)isStartPositionLongValid; +- (FITSInt32)getStartPositionLong; +- (void)setStartPositionLong:(FITSInt32)startPositionLong; +// EndPositionLat +- (BOOL)isEndPositionLatValid; +- (FITSInt32)getEndPositionLat; +- (void)setEndPositionLat:(FITSInt32)endPositionLat; +// EndPositionLong +- (BOOL)isEndPositionLongValid; +- (FITSInt32)getEndPositionLong; +- (void)setEndPositionLong:(FITSInt32)endPositionLong; +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid; +- (FITFloat32)getTotalElapsedTime; +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime; +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid; +- (FITFloat32)getTotalTimerTime; +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime; +// TotalDistance +- (BOOL)isTotalDistanceValid; +- (FITFloat32)getTotalDistance; +- (void)setTotalDistance:(FITFloat32)totalDistance; +// TotalCycles +- (BOOL)isTotalCyclesValid; +- (FITUInt32)getTotalCycles; +- (void)setTotalCycles:(FITUInt32)totalCycles; +// TotalCycles Sub Fields +- (BOOL)isTotalStridesValid; +- (FITUInt32) getTotalStrides; +- (void)setTotalStrides:(FITUInt32)totalStrides; +- (BOOL)isTotalStrokesValid; +- (FITUInt32) getTotalStrokes; +- (void)setTotalStrokes:(FITUInt32)totalStrokes; +// TotalCalories +- (BOOL)isTotalCaloriesValid; +- (FITUInt16)getTotalCalories; +- (void)setTotalCalories:(FITUInt16)totalCalories; +// TotalFatCalories +- (BOOL)isTotalFatCaloriesValid; +- (FITUInt16)getTotalFatCalories; +- (void)setTotalFatCalories:(FITUInt16)totalFatCalories; +// AvgSpeed +- (BOOL)isAvgSpeedValid; +- (FITFloat32)getAvgSpeed; +- (void)setAvgSpeed:(FITFloat32)avgSpeed; +// MaxSpeed +- (BOOL)isMaxSpeedValid; +- (FITFloat32)getMaxSpeed; +- (void)setMaxSpeed:(FITFloat32)maxSpeed; +// AvgHeartRate +- (BOOL)isAvgHeartRateValid; +- (FITUInt8)getAvgHeartRate; +- (void)setAvgHeartRate:(FITUInt8)avgHeartRate; +// MaxHeartRate +- (BOOL)isMaxHeartRateValid; +- (FITUInt8)getMaxHeartRate; +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate; +// AvgCadence +- (BOOL)isAvgCadenceValid; +- (FITUInt8)getAvgCadence; +- (void)setAvgCadence:(FITUInt8)avgCadence; +// AvgCadence Sub Fields +- (BOOL)isAvgRunningCadenceValid; +- (FITUInt8) getAvgRunningCadence; +- (void)setAvgRunningCadence:(FITUInt8)avgRunningCadence; +// MaxCadence +- (BOOL)isMaxCadenceValid; +- (FITUInt8)getMaxCadence; +- (void)setMaxCadence:(FITUInt8)maxCadence; +// MaxCadence Sub Fields +- (BOOL)isMaxRunningCadenceValid; +- (FITUInt8) getMaxRunningCadence; +- (void)setMaxRunningCadence:(FITUInt8)maxRunningCadence; +// AvgPower +- (BOOL)isAvgPowerValid; +- (FITUInt16)getAvgPower; +- (void)setAvgPower:(FITUInt16)avgPower; +// MaxPower +- (BOOL)isMaxPowerValid; +- (FITUInt16)getMaxPower; +- (void)setMaxPower:(FITUInt16)maxPower; +// TotalAscent +- (BOOL)isTotalAscentValid; +- (FITUInt16)getTotalAscent; +- (void)setTotalAscent:(FITUInt16)totalAscent; +// TotalDescent +- (BOOL)isTotalDescentValid; +- (FITUInt16)getTotalDescent; +- (void)setTotalDescent:(FITUInt16)totalDescent; +// Intensity +- (BOOL)isIntensityValid; +- (FITIntensity)getIntensity; +- (void)setIntensity:(FITIntensity)intensity; +// LapTrigger +- (BOOL)isLapTriggerValid; +- (FITLapTrigger)getLapTrigger; +- (void)setLapTrigger:(FITLapTrigger)lapTrigger; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// EventGroup +- (BOOL)isEventGroupValid; +- (FITUInt8)getEventGroup; +- (void)setEventGroup:(FITUInt8)eventGroup; +// NumLengths +- (BOOL)isNumLengthsValid; +- (FITUInt16)getNumLengths; +- (void)setNumLengths:(FITUInt16)numLengths; +// NormalizedPower +- (BOOL)isNormalizedPowerValid; +- (FITUInt16)getNormalizedPower; +- (void)setNormalizedPower:(FITUInt16)normalizedPower; +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid; +- (FITLeftRightBalance100)getLeftRightBalance; +- (void)setLeftRightBalance:(FITLeftRightBalance100)leftRightBalance; +// FirstLengthIndex +- (BOOL)isFirstLengthIndexValid; +- (FITUInt16)getFirstLengthIndex; +- (void)setFirstLengthIndex:(FITUInt16)firstLengthIndex; +// AvgStrokeDistance +- (BOOL)isAvgStrokeDistanceValid; +- (FITFloat32)getAvgStrokeDistance; +- (void)setAvgStrokeDistance:(FITFloat32)avgStrokeDistance; +// SwimStroke +- (BOOL)isSwimStrokeValid; +- (FITSwimStroke)getSwimStroke; +- (void)setSwimStroke:(FITSwimStroke)swimStroke; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// NumActiveLengths +- (BOOL)isNumActiveLengthsValid; +- (FITUInt16)getNumActiveLengths; +- (void)setNumActiveLengths:(FITUInt16)numActiveLengths; +// TotalWork +- (BOOL)isTotalWorkValid; +- (FITUInt32)getTotalWork; +- (void)setTotalWork:(FITUInt32)totalWork; +// AvgAltitude +- (BOOL)isAvgAltitudeValid; +- (FITFloat32)getAvgAltitude; +- (void)setAvgAltitude:(FITFloat32)avgAltitude; +// MaxAltitude +- (BOOL)isMaxAltitudeValid; +- (FITFloat32)getMaxAltitude; +- (void)setMaxAltitude:(FITFloat32)maxAltitude; +// GpsAccuracy +- (BOOL)isGpsAccuracyValid; +- (FITUInt8)getGpsAccuracy; +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy; +// AvgGrade +- (BOOL)isAvgGradeValid; +- (FITFloat32)getAvgGrade; +- (void)setAvgGrade:(FITFloat32)avgGrade; +// AvgPosGrade +- (BOOL)isAvgPosGradeValid; +- (FITFloat32)getAvgPosGrade; +- (void)setAvgPosGrade:(FITFloat32)avgPosGrade; +// AvgNegGrade +- (BOOL)isAvgNegGradeValid; +- (FITFloat32)getAvgNegGrade; +- (void)setAvgNegGrade:(FITFloat32)avgNegGrade; +// MaxPosGrade +- (BOOL)isMaxPosGradeValid; +- (FITFloat32)getMaxPosGrade; +- (void)setMaxPosGrade:(FITFloat32)maxPosGrade; +// MaxNegGrade +- (BOOL)isMaxNegGradeValid; +- (FITFloat32)getMaxNegGrade; +- (void)setMaxNegGrade:(FITFloat32)maxNegGrade; +// AvgTemperature +- (BOOL)isAvgTemperatureValid; +- (FITSInt8)getAvgTemperature; +- (void)setAvgTemperature:(FITSInt8)avgTemperature; +// MaxTemperature +- (BOOL)isMaxTemperatureValid; +- (FITSInt8)getMaxTemperature; +- (void)setMaxTemperature:(FITSInt8)maxTemperature; +// TotalMovingTime +- (BOOL)isTotalMovingTimeValid; +- (FITFloat32)getTotalMovingTime; +- (void)setTotalMovingTime:(FITFloat32)totalMovingTime; +// AvgPosVerticalSpeed +- (BOOL)isAvgPosVerticalSpeedValid; +- (FITFloat32)getAvgPosVerticalSpeed; +- (void)setAvgPosVerticalSpeed:(FITFloat32)avgPosVerticalSpeed; +// AvgNegVerticalSpeed +- (BOOL)isAvgNegVerticalSpeedValid; +- (FITFloat32)getAvgNegVerticalSpeed; +- (void)setAvgNegVerticalSpeed:(FITFloat32)avgNegVerticalSpeed; +// MaxPosVerticalSpeed +- (BOOL)isMaxPosVerticalSpeedValid; +- (FITFloat32)getMaxPosVerticalSpeed; +- (void)setMaxPosVerticalSpeed:(FITFloat32)maxPosVerticalSpeed; +// MaxNegVerticalSpeed +- (BOOL)isMaxNegVerticalSpeedValid; +- (FITFloat32)getMaxNegVerticalSpeed; +- (void)setMaxNegVerticalSpeed:(FITFloat32)maxNegVerticalSpeed; +// TimeInHrZone +@property(readonly,nonatomic) uint8_t numTimeInHrZoneValues; +- (BOOL)isTimeInHrZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInHrZoneforIndex : (uint8_t)index; +- (void)setTimeInHrZone:(FITFloat32)timeInHrZone forIndex:(uint8_t)index; +// TimeInSpeedZone +@property(readonly,nonatomic) uint8_t numTimeInSpeedZoneValues; +- (BOOL)isTimeInSpeedZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInSpeedZoneforIndex : (uint8_t)index; +- (void)setTimeInSpeedZone:(FITFloat32)timeInSpeedZone forIndex:(uint8_t)index; +// TimeInCadenceZone +@property(readonly,nonatomic) uint8_t numTimeInCadenceZoneValues; +- (BOOL)isTimeInCadenceZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInCadenceZoneforIndex : (uint8_t)index; +- (void)setTimeInCadenceZone:(FITFloat32)timeInCadenceZone forIndex:(uint8_t)index; +// TimeInPowerZone +@property(readonly,nonatomic) uint8_t numTimeInPowerZoneValues; +- (BOOL)isTimeInPowerZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInPowerZoneforIndex : (uint8_t)index; +- (void)setTimeInPowerZone:(FITFloat32)timeInPowerZone forIndex:(uint8_t)index; +// RepetitionNum +- (BOOL)isRepetitionNumValid; +- (FITUInt16)getRepetitionNum; +- (void)setRepetitionNum:(FITUInt16)repetitionNum; +// MinAltitude +- (BOOL)isMinAltitudeValid; +- (FITFloat32)getMinAltitude; +- (void)setMinAltitude:(FITFloat32)minAltitude; +// MinHeartRate +- (BOOL)isMinHeartRateValid; +- (FITUInt8)getMinHeartRate; +- (void)setMinHeartRate:(FITUInt8)minHeartRate; +// WktStepIndex +- (BOOL)isWktStepIndexValid; +- (FITMessageIndex)getWktStepIndex; +- (void)setWktStepIndex:(FITMessageIndex)wktStepIndex; +// OpponentScore +- (BOOL)isOpponentScoreValid; +- (FITUInt16)getOpponentScore; +- (void)setOpponentScore:(FITUInt16)opponentScore; +// StrokeCount +@property(readonly,nonatomic) uint8_t numStrokeCountValues; +- (BOOL)isStrokeCountValidforIndex : (uint8_t)index; +- (FITUInt16)getStrokeCountforIndex : (uint8_t)index; +- (void)setStrokeCount:(FITUInt16)strokeCount forIndex:(uint8_t)index; +// ZoneCount +@property(readonly,nonatomic) uint8_t numZoneCountValues; +- (BOOL)isZoneCountValidforIndex : (uint8_t)index; +- (FITUInt16)getZoneCountforIndex : (uint8_t)index; +- (void)setZoneCount:(FITUInt16)zoneCount forIndex:(uint8_t)index; +// AvgVerticalOscillation +- (BOOL)isAvgVerticalOscillationValid; +- (FITFloat32)getAvgVerticalOscillation; +- (void)setAvgVerticalOscillation:(FITFloat32)avgVerticalOscillation; +// AvgStanceTimePercent +- (BOOL)isAvgStanceTimePercentValid; +- (FITFloat32)getAvgStanceTimePercent; +- (void)setAvgStanceTimePercent:(FITFloat32)avgStanceTimePercent; +// AvgStanceTime +- (BOOL)isAvgStanceTimeValid; +- (FITFloat32)getAvgStanceTime; +- (void)setAvgStanceTime:(FITFloat32)avgStanceTime; +// AvgFractionalCadence +- (BOOL)isAvgFractionalCadenceValid; +- (FITFloat32)getAvgFractionalCadence; +- (void)setAvgFractionalCadence:(FITFloat32)avgFractionalCadence; +// MaxFractionalCadence +- (BOOL)isMaxFractionalCadenceValid; +- (FITFloat32)getMaxFractionalCadence; +- (void)setMaxFractionalCadence:(FITFloat32)maxFractionalCadence; +// TotalFractionalCycles +- (BOOL)isTotalFractionalCyclesValid; +- (FITFloat32)getTotalFractionalCycles; +- (void)setTotalFractionalCycles:(FITFloat32)totalFractionalCycles; +// PlayerScore +- (BOOL)isPlayerScoreValid; +- (FITUInt16)getPlayerScore; +- (void)setPlayerScore:(FITUInt16)playerScore; +// AvgTotalHemoglobinConc +@property(readonly,nonatomic) uint8_t numAvgTotalHemoglobinConcValues; +- (BOOL)isAvgTotalHemoglobinConcValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgTotalHemoglobinConcforIndex : (uint8_t)index; +- (void)setAvgTotalHemoglobinConc:(FITFloat32)avgTotalHemoglobinConc forIndex:(uint8_t)index; +// MinTotalHemoglobinConc +@property(readonly,nonatomic) uint8_t numMinTotalHemoglobinConcValues; +- (BOOL)isMinTotalHemoglobinConcValidforIndex : (uint8_t)index; +- (FITFloat32)getMinTotalHemoglobinConcforIndex : (uint8_t)index; +- (void)setMinTotalHemoglobinConc:(FITFloat32)minTotalHemoglobinConc forIndex:(uint8_t)index; +// MaxTotalHemoglobinConc +@property(readonly,nonatomic) uint8_t numMaxTotalHemoglobinConcValues; +- (BOOL)isMaxTotalHemoglobinConcValidforIndex : (uint8_t)index; +- (FITFloat32)getMaxTotalHemoglobinConcforIndex : (uint8_t)index; +- (void)setMaxTotalHemoglobinConc:(FITFloat32)maxTotalHemoglobinConc forIndex:(uint8_t)index; +// AvgSaturatedHemoglobinPercent +@property(readonly,nonatomic) uint8_t numAvgSaturatedHemoglobinPercentValues; +- (BOOL)isAvgSaturatedHemoglobinPercentValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgSaturatedHemoglobinPercentforIndex : (uint8_t)index; +- (void)setAvgSaturatedHemoglobinPercent:(FITFloat32)avgSaturatedHemoglobinPercent forIndex:(uint8_t)index; +// MinSaturatedHemoglobinPercent +@property(readonly,nonatomic) uint8_t numMinSaturatedHemoglobinPercentValues; +- (BOOL)isMinSaturatedHemoglobinPercentValidforIndex : (uint8_t)index; +- (FITFloat32)getMinSaturatedHemoglobinPercentforIndex : (uint8_t)index; +- (void)setMinSaturatedHemoglobinPercent:(FITFloat32)minSaturatedHemoglobinPercent forIndex:(uint8_t)index; +// MaxSaturatedHemoglobinPercent +@property(readonly,nonatomic) uint8_t numMaxSaturatedHemoglobinPercentValues; +- (BOOL)isMaxSaturatedHemoglobinPercentValidforIndex : (uint8_t)index; +- (FITFloat32)getMaxSaturatedHemoglobinPercentforIndex : (uint8_t)index; +- (void)setMaxSaturatedHemoglobinPercent:(FITFloat32)maxSaturatedHemoglobinPercent forIndex:(uint8_t)index; +// AvgLeftTorqueEffectiveness +- (BOOL)isAvgLeftTorqueEffectivenessValid; +- (FITFloat32)getAvgLeftTorqueEffectiveness; +- (void)setAvgLeftTorqueEffectiveness:(FITFloat32)avgLeftTorqueEffectiveness; +// AvgRightTorqueEffectiveness +- (BOOL)isAvgRightTorqueEffectivenessValid; +- (FITFloat32)getAvgRightTorqueEffectiveness; +- (void)setAvgRightTorqueEffectiveness:(FITFloat32)avgRightTorqueEffectiveness; +// AvgLeftPedalSmoothness +- (BOOL)isAvgLeftPedalSmoothnessValid; +- (FITFloat32)getAvgLeftPedalSmoothness; +- (void)setAvgLeftPedalSmoothness:(FITFloat32)avgLeftPedalSmoothness; +// AvgRightPedalSmoothness +- (BOOL)isAvgRightPedalSmoothnessValid; +- (FITFloat32)getAvgRightPedalSmoothness; +- (void)setAvgRightPedalSmoothness:(FITFloat32)avgRightPedalSmoothness; +// AvgCombinedPedalSmoothness +- (BOOL)isAvgCombinedPedalSmoothnessValid; +- (FITFloat32)getAvgCombinedPedalSmoothness; +- (void)setAvgCombinedPedalSmoothness:(FITFloat32)avgCombinedPedalSmoothness; +// TimeStanding +- (BOOL)isTimeStandingValid; +- (FITFloat32)getTimeStanding; +- (void)setTimeStanding:(FITFloat32)timeStanding; +// StandCount +- (BOOL)isStandCountValid; +- (FITUInt16)getStandCount; +- (void)setStandCount:(FITUInt16)standCount; +// AvgLeftPco +- (BOOL)isAvgLeftPcoValid; +- (FITSInt8)getAvgLeftPco; +- (void)setAvgLeftPco:(FITSInt8)avgLeftPco; +// AvgRightPco +- (BOOL)isAvgRightPcoValid; +- (FITSInt8)getAvgRightPco; +- (void)setAvgRightPco:(FITSInt8)avgRightPco; +// AvgLeftPowerPhase +@property(readonly,nonatomic) uint8_t numAvgLeftPowerPhaseValues; +- (BOOL)isAvgLeftPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgLeftPowerPhaseforIndex : (uint8_t)index; +- (void)setAvgLeftPowerPhase:(FITFloat32)avgLeftPowerPhase forIndex:(uint8_t)index; +// AvgLeftPowerPhasePeak +@property(readonly,nonatomic) uint8_t numAvgLeftPowerPhasePeakValues; +- (BOOL)isAvgLeftPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgLeftPowerPhasePeakforIndex : (uint8_t)index; +- (void)setAvgLeftPowerPhasePeak:(FITFloat32)avgLeftPowerPhasePeak forIndex:(uint8_t)index; +// AvgRightPowerPhase +@property(readonly,nonatomic) uint8_t numAvgRightPowerPhaseValues; +- (BOOL)isAvgRightPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgRightPowerPhaseforIndex : (uint8_t)index; +- (void)setAvgRightPowerPhase:(FITFloat32)avgRightPowerPhase forIndex:(uint8_t)index; +// AvgRightPowerPhasePeak +@property(readonly,nonatomic) uint8_t numAvgRightPowerPhasePeakValues; +- (BOOL)isAvgRightPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgRightPowerPhasePeakforIndex : (uint8_t)index; +- (void)setAvgRightPowerPhasePeak:(FITFloat32)avgRightPowerPhasePeak forIndex:(uint8_t)index; +// AvgPowerPosition +@property(readonly,nonatomic) uint8_t numAvgPowerPositionValues; +- (BOOL)isAvgPowerPositionValidforIndex : (uint8_t)index; +- (FITUInt16)getAvgPowerPositionforIndex : (uint8_t)index; +- (void)setAvgPowerPosition:(FITUInt16)avgPowerPosition forIndex:(uint8_t)index; +// MaxPowerPosition +@property(readonly,nonatomic) uint8_t numMaxPowerPositionValues; +- (BOOL)isMaxPowerPositionValidforIndex : (uint8_t)index; +- (FITUInt16)getMaxPowerPositionforIndex : (uint8_t)index; +- (void)setMaxPowerPosition:(FITUInt16)maxPowerPosition forIndex:(uint8_t)index; +// AvgCadencePosition +@property(readonly,nonatomic) uint8_t numAvgCadencePositionValues; +- (BOOL)isAvgCadencePositionValidforIndex : (uint8_t)index; +- (FITUInt8)getAvgCadencePositionforIndex : (uint8_t)index; +- (void)setAvgCadencePosition:(FITUInt8)avgCadencePosition forIndex:(uint8_t)index; +// MaxCadencePosition +@property(readonly,nonatomic) uint8_t numMaxCadencePositionValues; +- (BOOL)isMaxCadencePositionValidforIndex : (uint8_t)index; +- (FITUInt8)getMaxCadencePositionforIndex : (uint8_t)index; +- (void)setMaxCadencePosition:(FITUInt8)maxCadencePosition forIndex:(uint8_t)index; +// EnhancedAvgSpeed +- (BOOL)isEnhancedAvgSpeedValid; +- (FITFloat32)getEnhancedAvgSpeed; +- (void)setEnhancedAvgSpeed:(FITFloat32)enhancedAvgSpeed; +// EnhancedMaxSpeed +- (BOOL)isEnhancedMaxSpeedValid; +- (FITFloat32)getEnhancedMaxSpeed; +- (void)setEnhancedMaxSpeed:(FITFloat32)enhancedMaxSpeed; +// EnhancedAvgAltitude +- (BOOL)isEnhancedAvgAltitudeValid; +- (FITFloat32)getEnhancedAvgAltitude; +- (void)setEnhancedAvgAltitude:(FITFloat32)enhancedAvgAltitude; +// EnhancedMinAltitude +- (BOOL)isEnhancedMinAltitudeValid; +- (FITFloat32)getEnhancedMinAltitude; +- (void)setEnhancedMinAltitude:(FITFloat32)enhancedMinAltitude; +// EnhancedMaxAltitude +- (BOOL)isEnhancedMaxAltitudeValid; +- (FITFloat32)getEnhancedMaxAltitude; +- (void)setEnhancedMaxAltitude:(FITFloat32)enhancedMaxAltitude; +// AvgLevMotorPower +- (BOOL)isAvgLevMotorPowerValid; +- (FITUInt16)getAvgLevMotorPower; +- (void)setAvgLevMotorPower:(FITUInt16)avgLevMotorPower; +// MaxLevMotorPower +- (BOOL)isMaxLevMotorPowerValid; +- (FITUInt16)getMaxLevMotorPower; +- (void)setMaxLevMotorPower:(FITUInt16)maxLevMotorPower; +// LevBatteryConsumption +- (BOOL)isLevBatteryConsumptionValid; +- (FITFloat32)getLevBatteryConsumption; +- (void)setLevBatteryConsumption:(FITFloat32)levBatteryConsumption; +// AvgVerticalRatio +- (BOOL)isAvgVerticalRatioValid; +- (FITFloat32)getAvgVerticalRatio; +- (void)setAvgVerticalRatio:(FITFloat32)avgVerticalRatio; +// AvgStanceTimeBalance +- (BOOL)isAvgStanceTimeBalanceValid; +- (FITFloat32)getAvgStanceTimeBalance; +- (void)setAvgStanceTimeBalance:(FITFloat32)avgStanceTimeBalance; +// AvgStepLength +- (BOOL)isAvgStepLengthValid; +- (FITFloat32)getAvgStepLength; +- (void)setAvgStepLength:(FITFloat32)avgStepLength; +// AvgVam +- (BOOL)isAvgVamValid; +- (FITFloat32)getAvgVam; +- (void)setAvgVam:(FITFloat32)avgVam; +// TotalGrit +- (BOOL)isTotalGritValid; +- (FITFloat32)getTotalGrit; +- (void)setTotalGrit:(FITFloat32)totalGrit; +// TotalFlow +- (BOOL)isTotalFlowValid; +- (FITFloat32)getTotalFlow; +- (void)setTotalFlow:(FITFloat32)totalFlow; +// JumpCount +- (BOOL)isJumpCountValid; +- (FITUInt16)getJumpCount; +- (void)setJumpCount:(FITUInt16)jumpCount; +// AvgGrit +- (BOOL)isAvgGritValid; +- (FITFloat32)getAvgGrit; +- (void)setAvgGrit:(FITFloat32)avgGrit; +// AvgFlow +- (BOOL)isAvgFlowValid; +- (FITFloat32)getAvgFlow; +- (void)setAvgFlow:(FITFloat32)avgFlow; +// TotalFractionalAscent +- (BOOL)isTotalFractionalAscentValid; +- (FITFloat32)getTotalFractionalAscent; +- (void)setTotalFractionalAscent:(FITFloat32)totalFractionalAscent; +// TotalFractionalDescent +- (BOOL)isTotalFractionalDescentValid; +- (FITFloat32)getTotalFractionalDescent; +- (void)setTotalFractionalDescent:(FITFloat32)totalFractionalDescent; +// AvgCoreTemperature +- (BOOL)isAvgCoreTemperatureValid; +- (FITFloat32)getAvgCoreTemperature; +- (void)setAvgCoreTemperature:(FITFloat32)avgCoreTemperature; +// MinCoreTemperature +- (BOOL)isMinCoreTemperatureValid; +- (FITFloat32)getMinCoreTemperature; +- (void)setMinCoreTemperature:(FITFloat32)minCoreTemperature; +// MaxCoreTemperature +- (BOOL)isMaxCoreTemperatureValid; +- (FITFloat32)getMaxCoreTemperature; +- (void)setMaxCoreTemperature:(FITFloat32)maxCoreTemperature; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITLengthMesg.h b/Sources/ObjcFIT/include/FITLengthMesg.h new file mode 100644 index 0000000..440d0dd --- /dev/null +++ b/Sources/ObjcFIT/include/FITLengthMesg.h @@ -0,0 +1,100 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITLengthMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Event +- (BOOL)isEventValid; +- (FITEvent)getEvent; +- (void)setEvent:(FITEvent)event; +// EventType +- (BOOL)isEventTypeValid; +- (FITEventType)getEventType; +- (void)setEventType:(FITEventType)eventType; +// StartTime +- (BOOL)isStartTimeValid; +- (FITDate *)getStartTime; +- (void)setStartTime:(FITDate *)startTime; +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid; +- (FITFloat32)getTotalElapsedTime; +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime; +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid; +- (FITFloat32)getTotalTimerTime; +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime; +// TotalStrokes +- (BOOL)isTotalStrokesValid; +- (FITUInt16)getTotalStrokes; +- (void)setTotalStrokes:(FITUInt16)totalStrokes; +// AvgSpeed +- (BOOL)isAvgSpeedValid; +- (FITFloat32)getAvgSpeed; +- (void)setAvgSpeed:(FITFloat32)avgSpeed; +// SwimStroke +- (BOOL)isSwimStrokeValid; +- (FITSwimStroke)getSwimStroke; +- (void)setSwimStroke:(FITSwimStroke)swimStroke; +// AvgSwimmingCadence +- (BOOL)isAvgSwimmingCadenceValid; +- (FITUInt8)getAvgSwimmingCadence; +- (void)setAvgSwimmingCadence:(FITUInt8)avgSwimmingCadence; +// EventGroup +- (BOOL)isEventGroupValid; +- (FITUInt8)getEventGroup; +- (void)setEventGroup:(FITUInt8)eventGroup; +// TotalCalories +- (BOOL)isTotalCaloriesValid; +- (FITUInt16)getTotalCalories; +- (void)setTotalCalories:(FITUInt16)totalCalories; +// LengthType +- (BOOL)isLengthTypeValid; +- (FITLengthType)getLengthType; +- (void)setLengthType:(FITLengthType)lengthType; +// PlayerScore +- (BOOL)isPlayerScoreValid; +- (FITUInt16)getPlayerScore; +- (void)setPlayerScore:(FITUInt16)playerScore; +// OpponentScore +- (BOOL)isOpponentScoreValid; +- (FITUInt16)getOpponentScore; +- (void)setOpponentScore:(FITUInt16)opponentScore; +// StrokeCount +@property(readonly,nonatomic) uint8_t numStrokeCountValues; +- (BOOL)isStrokeCountValidforIndex : (uint8_t)index; +- (FITUInt16)getStrokeCountforIndex : (uint8_t)index; +- (void)setStrokeCount:(FITUInt16)strokeCount forIndex:(uint8_t)index; +// ZoneCount +@property(readonly,nonatomic) uint8_t numZoneCountValues; +- (BOOL)isZoneCountValidforIndex : (uint8_t)index; +- (FITUInt16)getZoneCountforIndex : (uint8_t)index; +- (void)setZoneCount:(FITUInt16)zoneCount forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMagnetometerDataMesg.h b/Sources/ObjcFIT/include/FITMagnetometerDataMesg.h new file mode 100644 index 0000000..522eedc --- /dev/null +++ b/Sources/ObjcFIT/include/FITMagnetometerDataMesg.h @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITMagnetometerDataMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// SampleTimeOffset +@property(readonly,nonatomic) uint8_t numSampleTimeOffsetValues; +- (BOOL)isSampleTimeOffsetValidforIndex : (uint8_t)index; +- (FITUInt16)getSampleTimeOffsetforIndex : (uint8_t)index; +- (void)setSampleTimeOffset:(FITUInt16)sampleTimeOffset forIndex:(uint8_t)index; +// MagX +@property(readonly,nonatomic) uint8_t numMagXValues; +- (BOOL)isMagXValidforIndex : (uint8_t)index; +- (FITUInt16)getMagXforIndex : (uint8_t)index; +- (void)setMagX:(FITUInt16)magX forIndex:(uint8_t)index; +// MagY +@property(readonly,nonatomic) uint8_t numMagYValues; +- (BOOL)isMagYValidforIndex : (uint8_t)index; +- (FITUInt16)getMagYforIndex : (uint8_t)index; +- (void)setMagY:(FITUInt16)magY forIndex:(uint8_t)index; +// MagZ +@property(readonly,nonatomic) uint8_t numMagZValues; +- (BOOL)isMagZValidforIndex : (uint8_t)index; +- (FITUInt16)getMagZforIndex : (uint8_t)index; +- (void)setMagZ:(FITUInt16)magZ forIndex:(uint8_t)index; +// CalibratedMagX +@property(readonly,nonatomic) uint8_t numCalibratedMagXValues; +- (BOOL)isCalibratedMagXValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedMagXforIndex : (uint8_t)index; +- (void)setCalibratedMagX:(FITFloat32)calibratedMagX forIndex:(uint8_t)index; +// CalibratedMagY +@property(readonly,nonatomic) uint8_t numCalibratedMagYValues; +- (BOOL)isCalibratedMagYValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedMagYforIndex : (uint8_t)index; +- (void)setCalibratedMagY:(FITFloat32)calibratedMagY forIndex:(uint8_t)index; +// CalibratedMagZ +@property(readonly,nonatomic) uint8_t numCalibratedMagZValues; +- (BOOL)isCalibratedMagZValidforIndex : (uint8_t)index; +- (FITFloat32)getCalibratedMagZforIndex : (uint8_t)index; +- (void)setCalibratedMagZ:(FITFloat32)calibratedMagZ forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMemoGlobMesg.h b/Sources/ObjcFIT/include/FITMemoGlobMesg.h new file mode 100644 index 0000000..2970126 --- /dev/null +++ b/Sources/ObjcFIT/include/FITMemoGlobMesg.h @@ -0,0 +1,51 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITMemoGlobMesg : FITMessage +- (id)init; +// PartIndex +- (BOOL)isPartIndexValid; +- (FITUInt32)getPartIndex; +- (void)setPartIndex:(FITUInt32)partIndex; +// Memo +@property(readonly,nonatomic) uint8_t numMemoValues; +- (BOOL)isMemoValidforIndex : (uint8_t)index; +- (FITByte)getMemoforIndex : (uint8_t)index; +- (void)setMemo:(FITByte)memo forIndex:(uint8_t)index; +// MesgNum +- (BOOL)isMesgNumValid; +- (FITMesgNum)getMesgNum; +- (void)setMesgNum:(FITMesgNum)mesgNum; +// ParentIndex +- (BOOL)isParentIndexValid; +- (FITMessageIndex)getParentIndex; +- (void)setParentIndex:(FITMessageIndex)parentIndex; +// FieldNum +- (BOOL)isFieldNumValid; +- (FITUInt8)getFieldNum; +- (void)setFieldNum:(FITUInt8)fieldNum; +// Data +@property(readonly,nonatomic) uint8_t numDataValues; +- (BOOL)isDataValidforIndex : (uint8_t)index; +- (FITUInt8z)getDataforIndex : (uint8_t)index; +- (void)setData:(FITUInt8z)data forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMesgCapabilitiesMesg.h b/Sources/ObjcFIT/include/FITMesgCapabilitiesMesg.h new file mode 100644 index 0000000..a907a02 --- /dev/null +++ b/Sources/ObjcFIT/include/FITMesgCapabilitiesMesg.h @@ -0,0 +1,55 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITMesgCapabilitiesMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// File +- (BOOL)isFileValid; +- (FITFile)getFile; +- (void)setFile:(FITFile)file; +// MesgNum +- (BOOL)isMesgNumValid; +- (FITMesgNum)getMesgNum; +- (void)setMesgNum:(FITMesgNum)mesgNum; +// CountType +- (BOOL)isCountTypeValid; +- (FITMesgCount)getCountType; +- (void)setCountType:(FITMesgCount)countType; +// Count +- (BOOL)isCountValid; +- (FITUInt16)getCount; +- (void)setCount:(FITUInt16)count; +// Count Sub Fields +- (BOOL)isNumPerFileValid; +- (FITUInt16) getNumPerFile; +- (void)setNumPerFile:(FITUInt16)numPerFile; +- (BOOL)isMaxPerFileValid; +- (FITUInt16) getMaxPerFile; +- (void)setMaxPerFile:(FITUInt16)maxPerFile; +- (BOOL)isMaxPerFileTypeValid; +- (FITUInt16) getMaxPerFileType; +- (void)setMaxPerFileType:(FITUInt16)maxPerFileType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMessage.h b/Sources/ObjcFIT/include/FITMessage.h new file mode 100644 index 0000000..4874f02 --- /dev/null +++ b/Sources/ObjcFIT/include/FITMessage.h @@ -0,0 +1,68 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import +#import "FITTypes.h" + +@class FITDeveloperField; + +NS_ASSUME_NONNULL_BEGIN + +@interface FITMessage : NSObject +- (instancetype)init NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithMessage:(FITMessage *) message NS_DESIGNATED_INITIALIZER; +-(FITMesgNum)getNum; +-(void)addDeveloperField:(FITDeveloperField *)developerField; +-(NSArray*)getDeveloperFields; + +-(FITUInt8) getFieldNumValuesForField:(FITUInt8)fieldNum andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITBool) canField:(FITUInt8)fieldNum supportSubField:(FITUInt16)subFieldIndex; + +-(FITEnum)getFieldENUMValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITByte)getFieldBYTEValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITSInt8)getFieldSINT8ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt8)getFieldUINT8ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt8z)getFieldUINT8ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITSInt16)getFieldSINT16ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt16)getFieldUINT16ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt16z)getFieldUINT16ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITSInt32)getFieldSINT32ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt32)getFieldUINT32ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt32z)getFieldUINT32ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITSInt64)getFieldSINT64ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt64)getFieldUINT64ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITUInt64z)getFieldUINT64ZValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITFloat32)getFieldFLOAT32ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(FITFloat64)getFieldFLOAT64ValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(NSString *)getFieldSTRINGValueForField:(FITUInt8)fieldNum forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; + +-(void)setFieldENUMValueForField:(FITUInt8)fieldNum andValue:(FITEnum)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldBYTEValueForField:(FITUInt8)fieldNum andValue:(FITByte)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldSINT8ValueForField:(FITUInt8)fieldNum andValue:(FITSInt8)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT8ValueForField:(FITUInt8)fieldNum andValue:(FITUInt8)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT8ZValueForField:(FITUInt8)fieldNum andValue:(FITUInt8z)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldSINT16ValueForField:(FITUInt8)fieldNum andValue:(FITSInt16)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT16ValueForField:(FITUInt8)fieldNum andValue:(FITUInt16)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT16ZValueForField:(FITUInt8)fieldNum andValue:(FITUInt16z)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldSINT32ValueForField:(FITUInt8)fieldNum andValue:(FITSInt32)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT32ValueForField:(FITUInt8)fieldNum andValue:(FITUInt32)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT32ZValueForField:(FITUInt8)fieldNum andValue:(FITUInt32z)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldSINT64ValueForField:(FITUInt8)fieldNum andValue:(FITSInt64)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT64ValueForField:(FITUInt8)fieldNum andValue:(FITUInt64)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldUINT64ZValueForField:(FITUInt8)fieldNum andValue:(FITUInt64z)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldFLOAT32ValueForField:(FITUInt8)fieldNum andValue:(FITFloat32)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldFLOAT64ValueForField:(FITUInt8)fieldNum andValue:(FITFloat64)value forIndex:(uint8_t)fieldArrayIndex andSubFieldIndex:(FITUInt16) subFieldIndex; +-(void)setFieldSTRINGValueForField:(FITUInt8)fieldNum andValue:(NSString *)value forIndex:(uint8_t)fieldArrayIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMessageBroadcaster.h b/Sources/ObjcFIT/include/FITMessageBroadcaster.h new file mode 100644 index 0000000..dbe8f04 --- /dev/null +++ b/Sources/ObjcFIT/include/FITMessageBroadcaster.h @@ -0,0 +1,563 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + +#import + +#import "FITDecoder.h" +#import "FITMessage.h" + +#import "FITFileIdMesg.h" +#import "FITFileCreatorMesg.h" +#import "FITTimestampCorrelationMesg.h" +#import "FITSoftwareMesg.h" +#import "FITSlaveDeviceMesg.h" +#import "FITCapabilitiesMesg.h" +#import "FITFileCapabilitiesMesg.h" +#import "FITMesgCapabilitiesMesg.h" +#import "FITFieldCapabilitiesMesg.h" +#import "FITDeviceSettingsMesg.h" +#import "FITUserProfileMesg.h" +#import "FITHrmProfileMesg.h" +#import "FITSdmProfileMesg.h" +#import "FITBikeProfileMesg.h" +#import "FITConnectivityMesg.h" +#import "FITWatchfaceSettingsMesg.h" +#import "FITOhrSettingsMesg.h" +#import "FITZonesTargetMesg.h" +#import "FITSportMesg.h" +#import "FITHrZoneMesg.h" +#import "FITSpeedZoneMesg.h" +#import "FITCadenceZoneMesg.h" +#import "FITPowerZoneMesg.h" +#import "FITMetZoneMesg.h" +#import "FITDiveSettingsMesg.h" +#import "FITDiveAlarmMesg.h" +#import "FITDiveGasMesg.h" +#import "FITGoalMesg.h" +#import "FITActivityMesg.h" +#import "FITSessionMesg.h" +#import "FITLapMesg.h" +#import "FITLengthMesg.h" +#import "FITRecordMesg.h" +#import "FITEventMesg.h" +#import "FITDeviceInfoMesg.h" +#import "FITDeviceAuxBatteryInfoMesg.h" +#import "FITTrainingFileMesg.h" +#import "FITWeatherConditionsMesg.h" +#import "FITWeatherAlertMesg.h" +#import "FITGpsMetadataMesg.h" +#import "FITCameraEventMesg.h" +#import "FITGyroscopeDataMesg.h" +#import "FITAccelerometerDataMesg.h" +#import "FITMagnetometerDataMesg.h" +#import "FITBarometerDataMesg.h" +#import "FITThreeDSensorCalibrationMesg.h" +#import "FITOneDSensorCalibrationMesg.h" +#import "FITVideoFrameMesg.h" +#import "FITObdiiDataMesg.h" +#import "FITNmeaSentenceMesg.h" +#import "FITAviationAttitudeMesg.h" +#import "FITVideoMesg.h" +#import "FITVideoTitleMesg.h" +#import "FITVideoDescriptionMesg.h" +#import "FITVideoClipMesg.h" +#import "FITSetMesg.h" +#import "FITJumpMesg.h" +#import "FITClimbProMesg.h" +#import "FITFieldDescriptionMesg.h" +#import "FITDeveloperDataIdMesg.h" +#import "FITCourseMesg.h" +#import "FITCoursePointMesg.h" +#import "FITSegmentIdMesg.h" +#import "FITSegmentLeaderboardEntryMesg.h" +#import "FITSegmentPointMesg.h" +#import "FITSegmentLapMesg.h" +#import "FITSegmentFileMesg.h" +#import "FITWorkoutMesg.h" +#import "FITWorkoutSessionMesg.h" +#import "FITWorkoutStepMesg.h" +#import "FITExerciseTitleMesg.h" +#import "FITScheduleMesg.h" +#import "FITTotalsMesg.h" +#import "FITWeightScaleMesg.h" +#import "FITBloodPressureMesg.h" +#import "FITMonitoringInfoMesg.h" +#import "FITMonitoringMesg.h" +#import "FITHrMesg.h" +#import "FITStressLevelMesg.h" +#import "FITMemoGlobMesg.h" +#import "FITAntChannelIdMesg.h" +#import "FITAntRxMesg.h" +#import "FITAntTxMesg.h" +#import "FITExdScreenConfigurationMesg.h" +#import "FITExdDataFieldConfigurationMesg.h" +#import "FITExdDataConceptConfigurationMesg.h" +#import "FITDiveSummaryMesg.h" +#import "FITHrvMesg.h" +#import "FITPadMesg.h" + +NS_ASSUME_NONNULL_BEGIN + + +@class FITMessageBroadcaster; + +@protocol FITFileIdMesgDelegate +- (void)onFileIdMesg:(FITFileIdMesg*)mesg; +@end + +@protocol FITFileCreatorMesgDelegate +- (void)onFileCreatorMesg:(FITFileCreatorMesg*)mesg; +@end + +@protocol FITTimestampCorrelationMesgDelegate +- (void)onTimestampCorrelationMesg:(FITTimestampCorrelationMesg*)mesg; +@end + +@protocol FITSoftwareMesgDelegate +- (void)onSoftwareMesg:(FITSoftwareMesg*)mesg; +@end + +@protocol FITSlaveDeviceMesgDelegate +- (void)onSlaveDeviceMesg:(FITSlaveDeviceMesg*)mesg; +@end + +@protocol FITCapabilitiesMesgDelegate +- (void)onCapabilitiesMesg:(FITCapabilitiesMesg*)mesg; +@end + +@protocol FITFileCapabilitiesMesgDelegate +- (void)onFileCapabilitiesMesg:(FITFileCapabilitiesMesg*)mesg; +@end + +@protocol FITMesgCapabilitiesMesgDelegate +- (void)onMesgCapabilitiesMesg:(FITMesgCapabilitiesMesg*)mesg; +@end + +@protocol FITFieldCapabilitiesMesgDelegate +- (void)onFieldCapabilitiesMesg:(FITFieldCapabilitiesMesg*)mesg; +@end + +@protocol FITDeviceSettingsMesgDelegate +- (void)onDeviceSettingsMesg:(FITDeviceSettingsMesg*)mesg; +@end + +@protocol FITUserProfileMesgDelegate +- (void)onUserProfileMesg:(FITUserProfileMesg*)mesg; +@end + +@protocol FITHrmProfileMesgDelegate +- (void)onHrmProfileMesg:(FITHrmProfileMesg*)mesg; +@end + +@protocol FITSdmProfileMesgDelegate +- (void)onSdmProfileMesg:(FITSdmProfileMesg*)mesg; +@end + +@protocol FITBikeProfileMesgDelegate +- (void)onBikeProfileMesg:(FITBikeProfileMesg*)mesg; +@end + +@protocol FITConnectivityMesgDelegate +- (void)onConnectivityMesg:(FITConnectivityMesg*)mesg; +@end + +@protocol FITWatchfaceSettingsMesgDelegate +- (void)onWatchfaceSettingsMesg:(FITWatchfaceSettingsMesg*)mesg; +@end + +@protocol FITOhrSettingsMesgDelegate +- (void)onOhrSettingsMesg:(FITOhrSettingsMesg*)mesg; +@end + +@protocol FITZonesTargetMesgDelegate +- (void)onZonesTargetMesg:(FITZonesTargetMesg*)mesg; +@end + +@protocol FITSportMesgDelegate +- (void)onSportMesg:(FITSportMesg*)mesg; +@end + +@protocol FITHrZoneMesgDelegate +- (void)onHrZoneMesg:(FITHrZoneMesg*)mesg; +@end + +@protocol FITSpeedZoneMesgDelegate +- (void)onSpeedZoneMesg:(FITSpeedZoneMesg*)mesg; +@end + +@protocol FITCadenceZoneMesgDelegate +- (void)onCadenceZoneMesg:(FITCadenceZoneMesg*)mesg; +@end + +@protocol FITPowerZoneMesgDelegate +- (void)onPowerZoneMesg:(FITPowerZoneMesg*)mesg; +@end + +@protocol FITMetZoneMesgDelegate +- (void)onMetZoneMesg:(FITMetZoneMesg*)mesg; +@end + +@protocol FITDiveSettingsMesgDelegate +- (void)onDiveSettingsMesg:(FITDiveSettingsMesg*)mesg; +@end + +@protocol FITDiveAlarmMesgDelegate +- (void)onDiveAlarmMesg:(FITDiveAlarmMesg*)mesg; +@end + +@protocol FITDiveGasMesgDelegate +- (void)onDiveGasMesg:(FITDiveGasMesg*)mesg; +@end + +@protocol FITGoalMesgDelegate +- (void)onGoalMesg:(FITGoalMesg*)mesg; +@end + +@protocol FITActivityMesgDelegate +- (void)onActivityMesg:(FITActivityMesg*)mesg; +@end + +@protocol FITSessionMesgDelegate +- (void)onSessionMesg:(FITSessionMesg*)mesg; +@end + +@protocol FITLapMesgDelegate +- (void)onLapMesg:(FITLapMesg*)mesg; +@end + +@protocol FITLengthMesgDelegate +- (void)onLengthMesg:(FITLengthMesg*)mesg; +@end + +@protocol FITRecordMesgDelegate +- (void)onRecordMesg:(FITRecordMesg*)mesg; +@end + +@protocol FITEventMesgDelegate +- (void)onEventMesg:(FITEventMesg*)mesg; +@end + +@protocol FITDeviceInfoMesgDelegate +- (void)onDeviceInfoMesg:(FITDeviceInfoMesg*)mesg; +@end + +@protocol FITDeviceAuxBatteryInfoMesgDelegate +- (void)onDeviceAuxBatteryInfoMesg:(FITDeviceAuxBatteryInfoMesg*)mesg; +@end + +@protocol FITTrainingFileMesgDelegate +- (void)onTrainingFileMesg:(FITTrainingFileMesg*)mesg; +@end + +@protocol FITWeatherConditionsMesgDelegate +- (void)onWeatherConditionsMesg:(FITWeatherConditionsMesg*)mesg; +@end + +@protocol FITWeatherAlertMesgDelegate +- (void)onWeatherAlertMesg:(FITWeatherAlertMesg*)mesg; +@end + +@protocol FITGpsMetadataMesgDelegate +- (void)onGpsMetadataMesg:(FITGpsMetadataMesg*)mesg; +@end + +@protocol FITCameraEventMesgDelegate +- (void)onCameraEventMesg:(FITCameraEventMesg*)mesg; +@end + +@protocol FITGyroscopeDataMesgDelegate +- (void)onGyroscopeDataMesg:(FITGyroscopeDataMesg*)mesg; +@end + +@protocol FITAccelerometerDataMesgDelegate +- (void)onAccelerometerDataMesg:(FITAccelerometerDataMesg*)mesg; +@end + +@protocol FITMagnetometerDataMesgDelegate +- (void)onMagnetometerDataMesg:(FITMagnetometerDataMesg*)mesg; +@end + +@protocol FITBarometerDataMesgDelegate +- (void)onBarometerDataMesg:(FITBarometerDataMesg*)mesg; +@end + +@protocol FITThreeDSensorCalibrationMesgDelegate +- (void)onThreeDSensorCalibrationMesg:(FITThreeDSensorCalibrationMesg*)mesg; +@end + +@protocol FITOneDSensorCalibrationMesgDelegate +- (void)onOneDSensorCalibrationMesg:(FITOneDSensorCalibrationMesg*)mesg; +@end + +@protocol FITVideoFrameMesgDelegate +- (void)onVideoFrameMesg:(FITVideoFrameMesg*)mesg; +@end + +@protocol FITObdiiDataMesgDelegate +- (void)onObdiiDataMesg:(FITObdiiDataMesg*)mesg; +@end + +@protocol FITNmeaSentenceMesgDelegate +- (void)onNmeaSentenceMesg:(FITNmeaSentenceMesg*)mesg; +@end + +@protocol FITAviationAttitudeMesgDelegate +- (void)onAviationAttitudeMesg:(FITAviationAttitudeMesg*)mesg; +@end + +@protocol FITVideoMesgDelegate +- (void)onVideoMesg:(FITVideoMesg*)mesg; +@end + +@protocol FITVideoTitleMesgDelegate +- (void)onVideoTitleMesg:(FITVideoTitleMesg*)mesg; +@end + +@protocol FITVideoDescriptionMesgDelegate +- (void)onVideoDescriptionMesg:(FITVideoDescriptionMesg*)mesg; +@end + +@protocol FITVideoClipMesgDelegate +- (void)onVideoClipMesg:(FITVideoClipMesg*)mesg; +@end + +@protocol FITSetMesgDelegate +- (void)onSetMesg:(FITSetMesg*)mesg; +@end + +@protocol FITJumpMesgDelegate +- (void)onJumpMesg:(FITJumpMesg*)mesg; +@end + +@protocol FITClimbProMesgDelegate +- (void)onClimbProMesg:(FITClimbProMesg*)mesg; +@end + +@protocol FITFieldDescriptionMesgDelegate +- (void)onFieldDescriptionMesg:(FITFieldDescriptionMesg*)mesg; +@end + +@protocol FITDeveloperDataIdMesgDelegate +- (void)onDeveloperDataIdMesg:(FITDeveloperDataIdMesg*)mesg; +@end + +@protocol FITCourseMesgDelegate +- (void)onCourseMesg:(FITCourseMesg*)mesg; +@end + +@protocol FITCoursePointMesgDelegate +- (void)onCoursePointMesg:(FITCoursePointMesg*)mesg; +@end + +@protocol FITSegmentIdMesgDelegate +- (void)onSegmentIdMesg:(FITSegmentIdMesg*)mesg; +@end + +@protocol FITSegmentLeaderboardEntryMesgDelegate +- (void)onSegmentLeaderboardEntryMesg:(FITSegmentLeaderboardEntryMesg*)mesg; +@end + +@protocol FITSegmentPointMesgDelegate +- (void)onSegmentPointMesg:(FITSegmentPointMesg*)mesg; +@end + +@protocol FITSegmentLapMesgDelegate +- (void)onSegmentLapMesg:(FITSegmentLapMesg*)mesg; +@end + +@protocol FITSegmentFileMesgDelegate +- (void)onSegmentFileMesg:(FITSegmentFileMesg*)mesg; +@end + +@protocol FITWorkoutMesgDelegate +- (void)onWorkoutMesg:(FITWorkoutMesg*)mesg; +@end + +@protocol FITWorkoutSessionMesgDelegate +- (void)onWorkoutSessionMesg:(FITWorkoutSessionMesg*)mesg; +@end + +@protocol FITWorkoutStepMesgDelegate +- (void)onWorkoutStepMesg:(FITWorkoutStepMesg*)mesg; +@end + +@protocol FITExerciseTitleMesgDelegate +- (void)onExerciseTitleMesg:(FITExerciseTitleMesg*)mesg; +@end + +@protocol FITScheduleMesgDelegate +- (void)onScheduleMesg:(FITScheduleMesg*)mesg; +@end + +@protocol FITTotalsMesgDelegate +- (void)onTotalsMesg:(FITTotalsMesg*)mesg; +@end + +@protocol FITWeightScaleMesgDelegate +- (void)onWeightScaleMesg:(FITWeightScaleMesg*)mesg; +@end + +@protocol FITBloodPressureMesgDelegate +- (void)onBloodPressureMesg:(FITBloodPressureMesg*)mesg; +@end + +@protocol FITMonitoringInfoMesgDelegate +- (void)onMonitoringInfoMesg:(FITMonitoringInfoMesg*)mesg; +@end + +@protocol FITMonitoringMesgDelegate +- (void)onMonitoringMesg:(FITMonitoringMesg*)mesg; +@end + +@protocol FITHrMesgDelegate +- (void)onHrMesg:(FITHrMesg*)mesg; +@end + +@protocol FITStressLevelMesgDelegate +- (void)onStressLevelMesg:(FITStressLevelMesg*)mesg; +@end + +@protocol FITMemoGlobMesgDelegate +- (void)onMemoGlobMesg:(FITMemoGlobMesg*)mesg; +@end + +@protocol FITAntChannelIdMesgDelegate +- (void)onAntChannelIdMesg:(FITAntChannelIdMesg*)mesg; +@end + +@protocol FITAntRxMesgDelegate +- (void)onAntRxMesg:(FITAntRxMesg*)mesg; +@end + +@protocol FITAntTxMesgDelegate +- (void)onAntTxMesg:(FITAntTxMesg*)mesg; +@end + +@protocol FITExdScreenConfigurationMesgDelegate +- (void)onExdScreenConfigurationMesg:(FITExdScreenConfigurationMesg*)mesg; +@end + +@protocol FITExdDataFieldConfigurationMesgDelegate +- (void)onExdDataFieldConfigurationMesg:(FITExdDataFieldConfigurationMesg*)mesg; +@end + +@protocol FITExdDataConceptConfigurationMesgDelegate +- (void)onExdDataConceptConfigurationMesg:(FITExdDataConceptConfigurationMesg*)mesg; +@end + +@protocol FITDiveSummaryMesgDelegate +- (void)onDiveSummaryMesg:(FITDiveSummaryMesg*)mesg; +@end + +@protocol FITHrvMesgDelegate +- (void)onHrvMesg:(FITHrvMesg*)mesg; +@end + +@protocol FITPadMesgDelegate +- (void)onPadMesg:(FITPadMesg*)mesg; +@end + +@interface FITMessageBroadcaster : NSObject +@property (weak) idmesgDelegate; + +@property (weak) id fitFileIdMesgDelegate; +@property (weak) id fitFileCreatorMesgDelegate; +@property (weak) id fitTimestampCorrelationMesgDelegate; +@property (weak) id fitSoftwareMesgDelegate; +@property (weak) id fitSlaveDeviceMesgDelegate; +@property (weak) id fitCapabilitiesMesgDelegate; +@property (weak) id fitFileCapabilitiesMesgDelegate; +@property (weak) id fitMesgCapabilitiesMesgDelegate; +@property (weak) id fitFieldCapabilitiesMesgDelegate; +@property (weak) id fitDeviceSettingsMesgDelegate; +@property (weak) id fitUserProfileMesgDelegate; +@property (weak) id fitHrmProfileMesgDelegate; +@property (weak) id fitSdmProfileMesgDelegate; +@property (weak) id fitBikeProfileMesgDelegate; +@property (weak) id fitConnectivityMesgDelegate; +@property (weak) id fitWatchfaceSettingsMesgDelegate; +@property (weak) id fitOhrSettingsMesgDelegate; +@property (weak) id fitZonesTargetMesgDelegate; +@property (weak) id fitSportMesgDelegate; +@property (weak) id fitHrZoneMesgDelegate; +@property (weak) id fitSpeedZoneMesgDelegate; +@property (weak) id fitCadenceZoneMesgDelegate; +@property (weak) id fitPowerZoneMesgDelegate; +@property (weak) id fitMetZoneMesgDelegate; +@property (weak) id fitDiveSettingsMesgDelegate; +@property (weak) id fitDiveAlarmMesgDelegate; +@property (weak) id fitDiveGasMesgDelegate; +@property (weak) id fitGoalMesgDelegate; +@property (weak) id fitActivityMesgDelegate; +@property (weak) id fitSessionMesgDelegate; +@property (weak) id fitLapMesgDelegate; +@property (weak) id fitLengthMesgDelegate; +@property (weak) id fitRecordMesgDelegate; +@property (weak) id fitEventMesgDelegate; +@property (weak) id fitDeviceInfoMesgDelegate; +@property (weak) id fitDeviceAuxBatteryInfoMesgDelegate; +@property (weak) id fitTrainingFileMesgDelegate; +@property (weak) id fitWeatherConditionsMesgDelegate; +@property (weak) id fitWeatherAlertMesgDelegate; +@property (weak) id fitGpsMetadataMesgDelegate; +@property (weak) id fitCameraEventMesgDelegate; +@property (weak) id fitGyroscopeDataMesgDelegate; +@property (weak) id fitAccelerometerDataMesgDelegate; +@property (weak) id fitMagnetometerDataMesgDelegate; +@property (weak) id fitBarometerDataMesgDelegate; +@property (weak) id fitThreeDSensorCalibrationMesgDelegate; +@property (weak) id fitOneDSensorCalibrationMesgDelegate; +@property (weak) id fitVideoFrameMesgDelegate; +@property (weak) id fitObdiiDataMesgDelegate; +@property (weak) id fitNmeaSentenceMesgDelegate; +@property (weak) id fitAviationAttitudeMesgDelegate; +@property (weak) id fitVideoMesgDelegate; +@property (weak) id fitVideoTitleMesgDelegate; +@property (weak) id fitVideoDescriptionMesgDelegate; +@property (weak) id fitVideoClipMesgDelegate; +@property (weak) id fitSetMesgDelegate; +@property (weak) id fitJumpMesgDelegate; +@property (weak) id fitClimbProMesgDelegate; +@property (weak) id fitFieldDescriptionMesgDelegate; +@property (weak) id fitDeveloperDataIdMesgDelegate; +@property (weak) id fitCourseMesgDelegate; +@property (weak) id fitCoursePointMesgDelegate; +@property (weak) id fitSegmentIdMesgDelegate; +@property (weak) id fitSegmentLeaderboardEntryMesgDelegate; +@property (weak) id fitSegmentPointMesgDelegate; +@property (weak) id fitSegmentLapMesgDelegate; +@property (weak) id fitSegmentFileMesgDelegate; +@property (weak) id fitWorkoutMesgDelegate; +@property (weak) id fitWorkoutSessionMesgDelegate; +@property (weak) id fitWorkoutStepMesgDelegate; +@property (weak) id fitExerciseTitleMesgDelegate; +@property (weak) id fitScheduleMesgDelegate; +@property (weak) id fitTotalsMesgDelegate; +@property (weak) id fitWeightScaleMesgDelegate; +@property (weak) id fitBloodPressureMesgDelegate; +@property (weak) id fitMonitoringInfoMesgDelegate; +@property (weak) id fitMonitoringMesgDelegate; +@property (weak) id fitHrMesgDelegate; +@property (weak) id fitStressLevelMesgDelegate; +@property (weak) id fitMemoGlobMesgDelegate; +@property (weak) id fitAntChannelIdMesgDelegate; +@property (weak) id fitAntRxMesgDelegate; +@property (weak) id fitAntTxMesgDelegate; +@property (weak) id fitExdScreenConfigurationMesgDelegate; +@property (weak) id fitExdDataFieldConfigurationMesgDelegate; +@property (weak) id fitExdDataConceptConfigurationMesgDelegate; +@property (weak) id fitDiveSummaryMesgDelegate; +@property (weak) id fitHrvMesgDelegate; +@property (weak) id fitPadMesgDelegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMetZoneMesg.h b/Sources/ObjcFIT/include/FITMetZoneMesg.h new file mode 100644 index 0000000..8225fc1 --- /dev/null +++ b/Sources/ObjcFIT/include/FITMetZoneMesg.h @@ -0,0 +1,41 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITMetZoneMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// HighBpm +- (BOOL)isHighBpmValid; +- (FITUInt8)getHighBpm; +- (void)setHighBpm:(FITUInt8)highBpm; +// Calories +- (BOOL)isCaloriesValid; +- (FITFloat32)getCalories; +- (void)setCalories:(FITFloat32)calories; +// FatCalories +- (BOOL)isFatCaloriesValid; +- (FITFloat32)getFatCalories; +- (void)setFatCalories:(FITFloat32)fatCalories; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMonitoringInfoMesg.h b/Sources/ObjcFIT/include/FITMonitoringInfoMesg.h new file mode 100644 index 0000000..fef69ed --- /dev/null +++ b/Sources/ObjcFIT/include/FITMonitoringInfoMesg.h @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITMonitoringInfoMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// LocalTimestamp +- (BOOL)isLocalTimestampValid; +- (FITLocalDateTime)getLocalTimestamp; +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp; +// ActivityType +@property(readonly,nonatomic) uint8_t numActivityTypeValues; +- (BOOL)isActivityTypeValidforIndex : (uint8_t)index; +- (FITActivityType)getActivityTypeforIndex : (uint8_t)index; +- (void)setActivityType:(FITActivityType)activityType forIndex:(uint8_t)index; +// CyclesToDistance +@property(readonly,nonatomic) uint8_t numCyclesToDistanceValues; +- (BOOL)isCyclesToDistanceValidforIndex : (uint8_t)index; +- (FITFloat32)getCyclesToDistanceforIndex : (uint8_t)index; +- (void)setCyclesToDistance:(FITFloat32)cyclesToDistance forIndex:(uint8_t)index; +// CyclesToCalories +@property(readonly,nonatomic) uint8_t numCyclesToCaloriesValues; +- (BOOL)isCyclesToCaloriesValidforIndex : (uint8_t)index; +- (FITFloat32)getCyclesToCaloriesforIndex : (uint8_t)index; +- (void)setCyclesToCalories:(FITFloat32)cyclesToCalories forIndex:(uint8_t)index; +// RestingMetabolicRate +- (BOOL)isRestingMetabolicRateValid; +- (FITUInt16)getRestingMetabolicRate; +- (void)setRestingMetabolicRate:(FITUInt16)restingMetabolicRate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITMonitoringMesg.h b/Sources/ObjcFIT/include/FITMonitoringMesg.h new file mode 100644 index 0000000..d017d0a --- /dev/null +++ b/Sources/ObjcFIT/include/FITMonitoringMesg.h @@ -0,0 +1,150 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITMonitoringMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// DeviceIndex +- (BOOL)isDeviceIndexValid; +- (FITDeviceIndex)getDeviceIndex; +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex; +// Calories +- (BOOL)isCaloriesValid; +- (FITUInt16)getCalories; +- (void)setCalories:(FITUInt16)calories; +// Distance +- (BOOL)isDistanceValid; +- (FITFloat32)getDistance; +- (void)setDistance:(FITFloat32)distance; +// Cycles +- (BOOL)isCyclesValid; +- (FITFloat32)getCycles; +- (void)setCycles:(FITFloat32)cycles; +// Cycles Sub Fields +- (BOOL)isStepsValid; +- (FITUInt32) getSteps; +- (void)setSteps:(FITUInt32)steps; +- (BOOL)isStrokesValid; +- (FITFloat32) getStrokes; +- (void)setStrokes:(FITFloat32)strokes; +// ActiveTime +- (BOOL)isActiveTimeValid; +- (FITFloat32)getActiveTime; +- (void)setActiveTime:(FITFloat32)activeTime; +// ActivityType +- (BOOL)isActivityTypeValid; +- (FITActivityType)getActivityType; +- (void)setActivityType:(FITActivityType)activityType; +// ActivitySubtype +- (BOOL)isActivitySubtypeValid; +- (FITActivitySubtype)getActivitySubtype; +- (void)setActivitySubtype:(FITActivitySubtype)activitySubtype; +// ActivityLevel +- (BOOL)isActivityLevelValid; +- (FITActivityLevel)getActivityLevel; +- (void)setActivityLevel:(FITActivityLevel)activityLevel; +// Distance16 +- (BOOL)isDistance16Valid; +- (FITUInt16)getDistance16; +- (void)setDistance16:(FITUInt16)distance16; +// Cycles16 +- (BOOL)isCycles16Valid; +- (FITUInt16)getCycles16; +- (void)setCycles16:(FITUInt16)cycles16; +// ActiveTime16 +- (BOOL)isActiveTime16Valid; +- (FITUInt16)getActiveTime16; +- (void)setActiveTime16:(FITUInt16)activeTime16; +// LocalTimestamp +- (BOOL)isLocalTimestampValid; +- (FITLocalDateTime)getLocalTimestamp; +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp; +// Temperature +- (BOOL)isTemperatureValid; +- (FITFloat32)getTemperature; +- (void)setTemperature:(FITFloat32)temperature; +// TemperatureMin +- (BOOL)isTemperatureMinValid; +- (FITFloat32)getTemperatureMin; +- (void)setTemperatureMin:(FITFloat32)temperatureMin; +// TemperatureMax +- (BOOL)isTemperatureMaxValid; +- (FITFloat32)getTemperatureMax; +- (void)setTemperatureMax:(FITFloat32)temperatureMax; +// ActivityTime +@property(readonly,nonatomic) uint8_t numActivityTimeValues; +- (BOOL)isActivityTimeValidforIndex : (uint8_t)index; +- (FITUInt16)getActivityTimeforIndex : (uint8_t)index; +- (void)setActivityTime:(FITUInt16)activityTime forIndex:(uint8_t)index; +// ActiveCalories +- (BOOL)isActiveCaloriesValid; +- (FITUInt16)getActiveCalories; +- (void)setActiveCalories:(FITUInt16)activeCalories; +// CurrentActivityTypeIntensity +- (BOOL)isCurrentActivityTypeIntensityValid; +- (FITByte)getCurrentActivityTypeIntensity; +- (void)setCurrentActivityTypeIntensity:(FITByte)currentActivityTypeIntensity; +// TimestampMin8 +- (BOOL)isTimestampMin8Valid; +- (FITUInt8)getTimestampMin8; +- (void)setTimestampMin8:(FITUInt8)timestampMin8; +// Timestamp16 +- (BOOL)isTimestamp16Valid; +- (FITUInt16)getTimestamp16; +- (void)setTimestamp16:(FITUInt16)timestamp16; +// HeartRate +- (BOOL)isHeartRateValid; +- (FITUInt8)getHeartRate; +- (void)setHeartRate:(FITUInt8)heartRate; +// Intensity +- (BOOL)isIntensityValid; +- (FITFloat32)getIntensity; +- (void)setIntensity:(FITFloat32)intensity; +// DurationMin +- (BOOL)isDurationMinValid; +- (FITUInt16)getDurationMin; +- (void)setDurationMin:(FITUInt16)durationMin; +// Duration +- (BOOL)isDurationValid; +- (FITUInt32)getDuration; +- (void)setDuration:(FITUInt32)duration; +// Ascent +- (BOOL)isAscentValid; +- (FITFloat32)getAscent; +- (void)setAscent:(FITFloat32)ascent; +// Descent +- (BOOL)isDescentValid; +- (FITFloat32)getDescent; +- (void)setDescent:(FITFloat32)descent; +// ModerateActivityMinutes +- (BOOL)isModerateActivityMinutesValid; +- (FITUInt16)getModerateActivityMinutes; +- (void)setModerateActivityMinutes:(FITUInt16)moderateActivityMinutes; +// VigorousActivityMinutes +- (BOOL)isVigorousActivityMinutesValid; +- (FITUInt16)getVigorousActivityMinutes; +- (void)setVigorousActivityMinutes:(FITUInt16)vigorousActivityMinutes; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITNmeaSentenceMesg.h b/Sources/ObjcFIT/include/FITNmeaSentenceMesg.h new file mode 100644 index 0000000..45b5543 --- /dev/null +++ b/Sources/ObjcFIT/include/FITNmeaSentenceMesg.h @@ -0,0 +1,38 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITNmeaSentenceMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// Sentence +- (BOOL)isSentenceValid; +- (NSString *)getSentence; +- (void)setSentence:(NSString *)sentence; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITObdiiDataMesg.h b/Sources/ObjcFIT/include/FITObdiiDataMesg.h new file mode 100644 index 0000000..3799737 --- /dev/null +++ b/Sources/ObjcFIT/include/FITObdiiDataMesg.h @@ -0,0 +1,66 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITObdiiDataMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// TimeOffset +@property(readonly,nonatomic) uint8_t numTimeOffsetValues; +- (BOOL)isTimeOffsetValidforIndex : (uint8_t)index; +- (FITUInt16)getTimeOffsetforIndex : (uint8_t)index; +- (void)setTimeOffset:(FITUInt16)timeOffset forIndex:(uint8_t)index; +// Pid +- (BOOL)isPidValid; +- (FITByte)getPid; +- (void)setPid:(FITByte)pid; +// RawData +@property(readonly,nonatomic) uint8_t numRawDataValues; +- (BOOL)isRawDataValidforIndex : (uint8_t)index; +- (FITByte)getRawDataforIndex : (uint8_t)index; +- (void)setRawData:(FITByte)rawData forIndex:(uint8_t)index; +// PidDataSize +@property(readonly,nonatomic) uint8_t numPidDataSizeValues; +- (BOOL)isPidDataSizeValidforIndex : (uint8_t)index; +- (FITUInt8)getPidDataSizeforIndex : (uint8_t)index; +- (void)setPidDataSize:(FITUInt8)pidDataSize forIndex:(uint8_t)index; +// SystemTime +@property(readonly,nonatomic) uint8_t numSystemTimeValues; +- (BOOL)isSystemTimeValidforIndex : (uint8_t)index; +- (FITUInt32)getSystemTimeforIndex : (uint8_t)index; +- (void)setSystemTime:(FITUInt32)systemTime forIndex:(uint8_t)index; +// StartTimestamp +- (BOOL)isStartTimestampValid; +- (FITDate *)getStartTimestamp; +- (void)setStartTimestamp:(FITDate *)startTimestamp; +// StartTimestampMs +- (BOOL)isStartTimestampMsValid; +- (FITUInt16)getStartTimestampMs; +- (void)setStartTimestampMs:(FITUInt16)startTimestampMs; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITOhrSettingsMesg.h b/Sources/ObjcFIT/include/FITOhrSettingsMesg.h new file mode 100644 index 0000000..21e75cc --- /dev/null +++ b/Sources/ObjcFIT/include/FITOhrSettingsMesg.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITOhrSettingsMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Enabled +- (BOOL)isEnabledValid; +- (FITSwitch)getEnabled; +- (void)setEnabled:(FITSwitch)enabled; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITOneDSensorCalibrationMesg.h b/Sources/ObjcFIT/include/FITOneDSensorCalibrationMesg.h new file mode 100644 index 0000000..74a35ea --- /dev/null +++ b/Sources/ObjcFIT/include/FITOneDSensorCalibrationMesg.h @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITOneDSensorCalibrationMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// SensorType +- (BOOL)isSensorTypeValid; +- (FITSensorType)getSensorType; +- (void)setSensorType:(FITSensorType)sensorType; +// CalibrationFactor +- (BOOL)isCalibrationFactorValid; +- (FITUInt32)getCalibrationFactor; +- (void)setCalibrationFactor:(FITUInt32)calibrationFactor; +// CalibrationFactor Sub Fields +- (BOOL)isBaroCalFactorValid; +- (FITUInt32) getBaroCalFactor; +- (void)setBaroCalFactor:(FITUInt32)baroCalFactor; +// CalibrationDivisor +- (BOOL)isCalibrationDivisorValid; +- (FITUInt32)getCalibrationDivisor; +- (void)setCalibrationDivisor:(FITUInt32)calibrationDivisor; +// LevelShift +- (BOOL)isLevelShiftValid; +- (FITUInt32)getLevelShift; +- (void)setLevelShift:(FITUInt32)levelShift; +// OffsetCal +- (BOOL)isOffsetCalValid; +- (FITSInt32)getOffsetCal; +- (void)setOffsetCal:(FITSInt32)offsetCal; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITPadMesg.h b/Sources/ObjcFIT/include/FITPadMesg.h new file mode 100644 index 0000000..f8b7b1f --- /dev/null +++ b/Sources/ObjcFIT/include/FITPadMesg.h @@ -0,0 +1,25 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITPadMesg : FITMessage +- (id)init; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITPowerZoneMesg.h b/Sources/ObjcFIT/include/FITPowerZoneMesg.h new file mode 100644 index 0000000..fbe3af7 --- /dev/null +++ b/Sources/ObjcFIT/include/FITPowerZoneMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITPowerZoneMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// HighValue +- (BOOL)isHighValueValid; +- (FITUInt16)getHighValue; +- (void)setHighValue:(FITUInt16)highValue; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITRecordMesg.h b/Sources/ObjcFIT/include/FITRecordMesg.h new file mode 100644 index 0000000..8bb1a9d --- /dev/null +++ b/Sources/ObjcFIT/include/FITRecordMesg.h @@ -0,0 +1,328 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITRecordMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// PositionLat +- (BOOL)isPositionLatValid; +- (FITSInt32)getPositionLat; +- (void)setPositionLat:(FITSInt32)positionLat; +// PositionLong +- (BOOL)isPositionLongValid; +- (FITSInt32)getPositionLong; +- (void)setPositionLong:(FITSInt32)positionLong; +// Altitude +- (BOOL)isAltitudeValid; +- (FITFloat32)getAltitude; +- (void)setAltitude:(FITFloat32)altitude; +// HeartRate +- (BOOL)isHeartRateValid; +- (FITUInt8)getHeartRate; +- (void)setHeartRate:(FITUInt8)heartRate; +// Cadence +- (BOOL)isCadenceValid; +- (FITUInt8)getCadence; +- (void)setCadence:(FITUInt8)cadence; +// Distance +- (BOOL)isDistanceValid; +- (FITFloat32)getDistance; +- (void)setDistance:(FITFloat32)distance; +// Speed +- (BOOL)isSpeedValid; +- (FITFloat32)getSpeed; +- (void)setSpeed:(FITFloat32)speed; +// Power +- (BOOL)isPowerValid; +- (FITUInt16)getPower; +- (void)setPower:(FITUInt16)power; +// CompressedSpeedDistance +@property(readonly,nonatomic) uint8_t numCompressedSpeedDistanceValues; +- (BOOL)isCompressedSpeedDistanceValidforIndex : (uint8_t)index; +- (FITByte)getCompressedSpeedDistanceforIndex : (uint8_t)index; +- (void)setCompressedSpeedDistance:(FITByte)compressedSpeedDistance forIndex:(uint8_t)index; +// Grade +- (BOOL)isGradeValid; +- (FITFloat32)getGrade; +- (void)setGrade:(FITFloat32)grade; +// Resistance +- (BOOL)isResistanceValid; +- (FITUInt8)getResistance; +- (void)setResistance:(FITUInt8)resistance; +// TimeFromCourse +- (BOOL)isTimeFromCourseValid; +- (FITFloat32)getTimeFromCourse; +- (void)setTimeFromCourse:(FITFloat32)timeFromCourse; +// CycleLength +- (BOOL)isCycleLengthValid; +- (FITFloat32)getCycleLength; +- (void)setCycleLength:(FITFloat32)cycleLength; +// Temperature +- (BOOL)isTemperatureValid; +- (FITSInt8)getTemperature; +- (void)setTemperature:(FITSInt8)temperature; +// Speed1s +@property(readonly,nonatomic) uint8_t numSpeed1sValues; +- (BOOL)isSpeed1sValidforIndex : (uint8_t)index; +- (FITFloat32)getSpeed1sforIndex : (uint8_t)index; +- (void)setSpeed1s:(FITFloat32)speed1s forIndex:(uint8_t)index; +// Cycles +- (BOOL)isCyclesValid; +- (FITUInt8)getCycles; +- (void)setCycles:(FITUInt8)cycles; +// TotalCycles +- (BOOL)isTotalCyclesValid; +- (FITUInt32)getTotalCycles; +- (void)setTotalCycles:(FITUInt32)totalCycles; +// CompressedAccumulatedPower +- (BOOL)isCompressedAccumulatedPowerValid; +- (FITUInt16)getCompressedAccumulatedPower; +- (void)setCompressedAccumulatedPower:(FITUInt16)compressedAccumulatedPower; +// AccumulatedPower +- (BOOL)isAccumulatedPowerValid; +- (FITUInt32)getAccumulatedPower; +- (void)setAccumulatedPower:(FITUInt32)accumulatedPower; +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid; +- (FITLeftRightBalance)getLeftRightBalance; +- (void)setLeftRightBalance:(FITLeftRightBalance)leftRightBalance; +// GpsAccuracy +- (BOOL)isGpsAccuracyValid; +- (FITUInt8)getGpsAccuracy; +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy; +// VerticalSpeed +- (BOOL)isVerticalSpeedValid; +- (FITFloat32)getVerticalSpeed; +- (void)setVerticalSpeed:(FITFloat32)verticalSpeed; +// Calories +- (BOOL)isCaloriesValid; +- (FITUInt16)getCalories; +- (void)setCalories:(FITUInt16)calories; +// VerticalOscillation +- (BOOL)isVerticalOscillationValid; +- (FITFloat32)getVerticalOscillation; +- (void)setVerticalOscillation:(FITFloat32)verticalOscillation; +// StanceTimePercent +- (BOOL)isStanceTimePercentValid; +- (FITFloat32)getStanceTimePercent; +- (void)setStanceTimePercent:(FITFloat32)stanceTimePercent; +// StanceTime +- (BOOL)isStanceTimeValid; +- (FITFloat32)getStanceTime; +- (void)setStanceTime:(FITFloat32)stanceTime; +// ActivityType +- (BOOL)isActivityTypeValid; +- (FITActivityType)getActivityType; +- (void)setActivityType:(FITActivityType)activityType; +// LeftTorqueEffectiveness +- (BOOL)isLeftTorqueEffectivenessValid; +- (FITFloat32)getLeftTorqueEffectiveness; +- (void)setLeftTorqueEffectiveness:(FITFloat32)leftTorqueEffectiveness; +// RightTorqueEffectiveness +- (BOOL)isRightTorqueEffectivenessValid; +- (FITFloat32)getRightTorqueEffectiveness; +- (void)setRightTorqueEffectiveness:(FITFloat32)rightTorqueEffectiveness; +// LeftPedalSmoothness +- (BOOL)isLeftPedalSmoothnessValid; +- (FITFloat32)getLeftPedalSmoothness; +- (void)setLeftPedalSmoothness:(FITFloat32)leftPedalSmoothness; +// RightPedalSmoothness +- (BOOL)isRightPedalSmoothnessValid; +- (FITFloat32)getRightPedalSmoothness; +- (void)setRightPedalSmoothness:(FITFloat32)rightPedalSmoothness; +// CombinedPedalSmoothness +- (BOOL)isCombinedPedalSmoothnessValid; +- (FITFloat32)getCombinedPedalSmoothness; +- (void)setCombinedPedalSmoothness:(FITFloat32)combinedPedalSmoothness; +// Time128 +- (BOOL)isTime128Valid; +- (FITFloat32)getTime128; +- (void)setTime128:(FITFloat32)time128; +// StrokeType +- (BOOL)isStrokeTypeValid; +- (FITStrokeType)getStrokeType; +- (void)setStrokeType:(FITStrokeType)strokeType; +// Zone +- (BOOL)isZoneValid; +- (FITUInt8)getZone; +- (void)setZone:(FITUInt8)zone; +// BallSpeed +- (BOOL)isBallSpeedValid; +- (FITFloat32)getBallSpeed; +- (void)setBallSpeed:(FITFloat32)ballSpeed; +// Cadence256 +- (BOOL)isCadence256Valid; +- (FITFloat32)getCadence256; +- (void)setCadence256:(FITFloat32)cadence256; +// FractionalCadence +- (BOOL)isFractionalCadenceValid; +- (FITFloat32)getFractionalCadence; +- (void)setFractionalCadence:(FITFloat32)fractionalCadence; +// TotalHemoglobinConc +- (BOOL)isTotalHemoglobinConcValid; +- (FITFloat32)getTotalHemoglobinConc; +- (void)setTotalHemoglobinConc:(FITFloat32)totalHemoglobinConc; +// TotalHemoglobinConcMin +- (BOOL)isTotalHemoglobinConcMinValid; +- (FITFloat32)getTotalHemoglobinConcMin; +- (void)setTotalHemoglobinConcMin:(FITFloat32)totalHemoglobinConcMin; +// TotalHemoglobinConcMax +- (BOOL)isTotalHemoglobinConcMaxValid; +- (FITFloat32)getTotalHemoglobinConcMax; +- (void)setTotalHemoglobinConcMax:(FITFloat32)totalHemoglobinConcMax; +// SaturatedHemoglobinPercent +- (BOOL)isSaturatedHemoglobinPercentValid; +- (FITFloat32)getSaturatedHemoglobinPercent; +- (void)setSaturatedHemoglobinPercent:(FITFloat32)saturatedHemoglobinPercent; +// SaturatedHemoglobinPercentMin +- (BOOL)isSaturatedHemoglobinPercentMinValid; +- (FITFloat32)getSaturatedHemoglobinPercentMin; +- (void)setSaturatedHemoglobinPercentMin:(FITFloat32)saturatedHemoglobinPercentMin; +// SaturatedHemoglobinPercentMax +- (BOOL)isSaturatedHemoglobinPercentMaxValid; +- (FITFloat32)getSaturatedHemoglobinPercentMax; +- (void)setSaturatedHemoglobinPercentMax:(FITFloat32)saturatedHemoglobinPercentMax; +// DeviceIndex +- (BOOL)isDeviceIndexValid; +- (FITDeviceIndex)getDeviceIndex; +- (void)setDeviceIndex:(FITDeviceIndex)deviceIndex; +// LeftPco +- (BOOL)isLeftPcoValid; +- (FITSInt8)getLeftPco; +- (void)setLeftPco:(FITSInt8)leftPco; +// RightPco +- (BOOL)isRightPcoValid; +- (FITSInt8)getRightPco; +- (void)setRightPco:(FITSInt8)rightPco; +// LeftPowerPhase +@property(readonly,nonatomic) uint8_t numLeftPowerPhaseValues; +- (BOOL)isLeftPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getLeftPowerPhaseforIndex : (uint8_t)index; +- (void)setLeftPowerPhase:(FITFloat32)leftPowerPhase forIndex:(uint8_t)index; +// LeftPowerPhasePeak +@property(readonly,nonatomic) uint8_t numLeftPowerPhasePeakValues; +- (BOOL)isLeftPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getLeftPowerPhasePeakforIndex : (uint8_t)index; +- (void)setLeftPowerPhasePeak:(FITFloat32)leftPowerPhasePeak forIndex:(uint8_t)index; +// RightPowerPhase +@property(readonly,nonatomic) uint8_t numRightPowerPhaseValues; +- (BOOL)isRightPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getRightPowerPhaseforIndex : (uint8_t)index; +- (void)setRightPowerPhase:(FITFloat32)rightPowerPhase forIndex:(uint8_t)index; +// RightPowerPhasePeak +@property(readonly,nonatomic) uint8_t numRightPowerPhasePeakValues; +- (BOOL)isRightPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getRightPowerPhasePeakforIndex : (uint8_t)index; +- (void)setRightPowerPhasePeak:(FITFloat32)rightPowerPhasePeak forIndex:(uint8_t)index; +// EnhancedSpeed +- (BOOL)isEnhancedSpeedValid; +- (FITFloat32)getEnhancedSpeed; +- (void)setEnhancedSpeed:(FITFloat32)enhancedSpeed; +// EnhancedAltitude +- (BOOL)isEnhancedAltitudeValid; +- (FITFloat32)getEnhancedAltitude; +- (void)setEnhancedAltitude:(FITFloat32)enhancedAltitude; +// BatterySoc +- (BOOL)isBatterySocValid; +- (FITFloat32)getBatterySoc; +- (void)setBatterySoc:(FITFloat32)batterySoc; +// MotorPower +- (BOOL)isMotorPowerValid; +- (FITUInt16)getMotorPower; +- (void)setMotorPower:(FITUInt16)motorPower; +// VerticalRatio +- (BOOL)isVerticalRatioValid; +- (FITFloat32)getVerticalRatio; +- (void)setVerticalRatio:(FITFloat32)verticalRatio; +// StanceTimeBalance +- (BOOL)isStanceTimeBalanceValid; +- (FITFloat32)getStanceTimeBalance; +- (void)setStanceTimeBalance:(FITFloat32)stanceTimeBalance; +// StepLength +- (BOOL)isStepLengthValid; +- (FITFloat32)getStepLength; +- (void)setStepLength:(FITFloat32)stepLength; +// AbsolutePressure +- (BOOL)isAbsolutePressureValid; +- (FITUInt32)getAbsolutePressure; +- (void)setAbsolutePressure:(FITUInt32)absolutePressure; +// Depth +- (BOOL)isDepthValid; +- (FITFloat32)getDepth; +- (void)setDepth:(FITFloat32)depth; +// NextStopDepth +- (BOOL)isNextStopDepthValid; +- (FITFloat32)getNextStopDepth; +- (void)setNextStopDepth:(FITFloat32)nextStopDepth; +// NextStopTime +- (BOOL)isNextStopTimeValid; +- (FITUInt32)getNextStopTime; +- (void)setNextStopTime:(FITUInt32)nextStopTime; +// TimeToSurface +- (BOOL)isTimeToSurfaceValid; +- (FITUInt32)getTimeToSurface; +- (void)setTimeToSurface:(FITUInt32)timeToSurface; +// NdlTime +- (BOOL)isNdlTimeValid; +- (FITUInt32)getNdlTime; +- (void)setNdlTime:(FITUInt32)ndlTime; +// CnsLoad +- (BOOL)isCnsLoadValid; +- (FITUInt8)getCnsLoad; +- (void)setCnsLoad:(FITUInt8)cnsLoad; +// N2Load +- (BOOL)isN2LoadValid; +- (FITUInt16)getN2Load; +- (void)setN2Load:(FITUInt16)n2Load; +// Grit +- (BOOL)isGritValid; +- (FITFloat32)getGrit; +- (void)setGrit:(FITFloat32)grit; +// Flow +- (BOOL)isFlowValid; +- (FITFloat32)getFlow; +- (void)setFlow:(FITFloat32)flow; +// EbikeTravelRange +- (BOOL)isEbikeTravelRangeValid; +- (FITUInt16)getEbikeTravelRange; +- (void)setEbikeTravelRange:(FITUInt16)ebikeTravelRange; +// EbikeBatteryLevel +- (BOOL)isEbikeBatteryLevelValid; +- (FITUInt8)getEbikeBatteryLevel; +- (void)setEbikeBatteryLevel:(FITUInt8)ebikeBatteryLevel; +// EbikeAssistMode +- (BOOL)isEbikeAssistModeValid; +- (FITUInt8)getEbikeAssistMode; +- (void)setEbikeAssistMode:(FITUInt8)ebikeAssistMode; +// EbikeAssistLevelPercent +- (BOOL)isEbikeAssistLevelPercentValid; +- (FITUInt8)getEbikeAssistLevelPercent; +- (void)setEbikeAssistLevelPercent:(FITUInt8)ebikeAssistLevelPercent; +// CoreTemperature +- (BOOL)isCoreTemperatureValid; +- (FITFloat32)getCoreTemperature; +- (void)setCoreTemperature:(FITFloat32)coreTemperature; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITScheduleMesg.h b/Sources/ObjcFIT/include/FITScheduleMesg.h new file mode 100644 index 0000000..36002bb --- /dev/null +++ b/Sources/ObjcFIT/include/FITScheduleMesg.h @@ -0,0 +1,61 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITScheduleMesg : FITMessage +- (id)init; +// Manufacturer +- (BOOL)isManufacturerValid; +- (FITManufacturer)getManufacturer; +- (void)setManufacturer:(FITManufacturer)manufacturer; +// Product +- (BOOL)isProductValid; +- (FITUInt16)getProduct; +- (void)setProduct:(FITUInt16)product; +// Product Sub Fields +- (BOOL)isFaveroProductValid; +- (FITFaveroProduct) getFaveroProduct; +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct; +- (BOOL)isGarminProductValid; +- (FITGarminProduct) getGarminProduct; +- (void)setGarminProduct:(FITGarminProduct)garminProduct; +// SerialNumber +- (BOOL)isSerialNumberValid; +- (FITUInt32z)getSerialNumber; +- (void)setSerialNumber:(FITUInt32z)serialNumber; +// TimeCreated +- (BOOL)isTimeCreatedValid; +- (FITDate *)getTimeCreated; +- (void)setTimeCreated:(FITDate *)timeCreated; +// Completed +- (BOOL)isCompletedValid; +- (FITBool)getCompleted; +- (void)setCompleted:(FITBool)completed; +// Type +- (BOOL)isTypeValid; +- (FITSchedule)getType; +- (void)setType:(FITSchedule)type; +// ScheduledTime +- (BOOL)isScheduledTimeValid; +- (FITLocalDateTime)getScheduledTime; +- (void)setScheduledTime:(FITLocalDateTime)scheduledTime; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSdmProfileMesg.h b/Sources/ObjcFIT/include/FITSdmProfileMesg.h new file mode 100644 index 0000000..02cd6a9 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSdmProfileMesg.h @@ -0,0 +1,57 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSdmProfileMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Enabled +- (BOOL)isEnabledValid; +- (FITBool)getEnabled; +- (void)setEnabled:(FITBool)enabled; +// SdmAntId +- (BOOL)isSdmAntIdValid; +- (FITUInt16z)getSdmAntId; +- (void)setSdmAntId:(FITUInt16z)sdmAntId; +// SdmCalFactor +- (BOOL)isSdmCalFactorValid; +- (FITFloat32)getSdmCalFactor; +- (void)setSdmCalFactor:(FITFloat32)sdmCalFactor; +// Odometer +- (BOOL)isOdometerValid; +- (FITFloat32)getOdometer; +- (void)setOdometer:(FITFloat32)odometer; +// SpeedSource +- (BOOL)isSpeedSourceValid; +- (FITBool)getSpeedSource; +- (void)setSpeedSource:(FITBool)speedSource; +// SdmAntIdTransType +- (BOOL)isSdmAntIdTransTypeValid; +- (FITUInt8z)getSdmAntIdTransType; +- (void)setSdmAntIdTransType:(FITUInt8z)sdmAntIdTransType; +// OdometerRollover +- (BOOL)isOdometerRolloverValid; +- (FITUInt8)getOdometerRollover; +- (void)setOdometerRollover:(FITUInt8)odometerRollover; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSegmentFileMesg.h b/Sources/ObjcFIT/include/FITSegmentFileMesg.h new file mode 100644 index 0000000..fbeacf9 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSegmentFileMesg.h @@ -0,0 +1,65 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSegmentFileMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// FileUuid +- (BOOL)isFileUuidValid; +- (NSString *)getFileUuid; +- (void)setFileUuid:(NSString *)fileUuid; +// Enabled +- (BOOL)isEnabledValid; +- (FITBool)getEnabled; +- (void)setEnabled:(FITBool)enabled; +// UserProfilePrimaryKey +- (BOOL)isUserProfilePrimaryKeyValid; +- (FITUInt32)getUserProfilePrimaryKey; +- (void)setUserProfilePrimaryKey:(FITUInt32)userProfilePrimaryKey; +// LeaderType +@property(readonly,nonatomic) uint8_t numLeaderTypeValues; +- (BOOL)isLeaderTypeValidforIndex : (uint8_t)index; +- (FITSegmentLeaderboardType)getLeaderTypeforIndex : (uint8_t)index; +- (void)setLeaderType:(FITSegmentLeaderboardType)leaderType forIndex:(uint8_t)index; +// LeaderGroupPrimaryKey +@property(readonly,nonatomic) uint8_t numLeaderGroupPrimaryKeyValues; +- (BOOL)isLeaderGroupPrimaryKeyValidforIndex : (uint8_t)index; +- (FITUInt32)getLeaderGroupPrimaryKeyforIndex : (uint8_t)index; +- (void)setLeaderGroupPrimaryKey:(FITUInt32)leaderGroupPrimaryKey forIndex:(uint8_t)index; +// LeaderActivityId +@property(readonly,nonatomic) uint8_t numLeaderActivityIdValues; +- (BOOL)isLeaderActivityIdValidforIndex : (uint8_t)index; +- (FITUInt32)getLeaderActivityIdforIndex : (uint8_t)index; +- (void)setLeaderActivityId:(FITUInt32)leaderActivityId forIndex:(uint8_t)index; +// LeaderActivityIdString +@property(readonly,nonatomic) uint8_t numLeaderActivityIdStringValues; +- (BOOL)isLeaderActivityIdStringValidforIndex : (uint8_t)index; +- (NSString *)getLeaderActivityIdStringforIndex : (uint8_t)index; +- (void)setLeaderActivityIdString:(NSString *)leaderActivityIdString forIndex:(uint8_t)index; +// DefaultRaceLeader +- (BOOL)isDefaultRaceLeaderValid; +- (FITUInt8)getDefaultRaceLeader; +- (void)setDefaultRaceLeader:(FITUInt8)defaultRaceLeader; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSegmentIdMesg.h b/Sources/ObjcFIT/include/FITSegmentIdMesg.h new file mode 100644 index 0000000..c9c9864 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSegmentIdMesg.h @@ -0,0 +1,61 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSegmentIdMesg : FITMessage +- (id)init; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// Uuid +- (BOOL)isUuidValid; +- (NSString *)getUuid; +- (void)setUuid:(NSString *)uuid; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// Enabled +- (BOOL)isEnabledValid; +- (FITBool)getEnabled; +- (void)setEnabled:(FITBool)enabled; +// UserProfilePrimaryKey +- (BOOL)isUserProfilePrimaryKeyValid; +- (FITUInt32)getUserProfilePrimaryKey; +- (void)setUserProfilePrimaryKey:(FITUInt32)userProfilePrimaryKey; +// DeviceId +- (BOOL)isDeviceIdValid; +- (FITUInt32)getDeviceId; +- (void)setDeviceId:(FITUInt32)deviceId; +// DefaultRaceLeader +- (BOOL)isDefaultRaceLeaderValid; +- (FITUInt8)getDefaultRaceLeader; +- (void)setDefaultRaceLeader:(FITUInt8)defaultRaceLeader; +// DeleteStatus +- (BOOL)isDeleteStatusValid; +- (FITSegmentDeleteStatus)getDeleteStatus; +- (void)setDeleteStatus:(FITSegmentDeleteStatus)deleteStatus; +// SelectionType +- (BOOL)isSelectionTypeValid; +- (FITSegmentSelectionType)getSelectionType; +- (void)setSelectionType:(FITSegmentSelectionType)selectionType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSegmentLapMesg.h b/Sources/ObjcFIT/include/FITSegmentLapMesg.h new file mode 100644 index 0000000..219559a --- /dev/null +++ b/Sources/ObjcFIT/include/FITSegmentLapMesg.h @@ -0,0 +1,410 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSegmentLapMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Event +- (BOOL)isEventValid; +- (FITEvent)getEvent; +- (void)setEvent:(FITEvent)event; +// EventType +- (BOOL)isEventTypeValid; +- (FITEventType)getEventType; +- (void)setEventType:(FITEventType)eventType; +// StartTime +- (BOOL)isStartTimeValid; +- (FITDate *)getStartTime; +- (void)setStartTime:(FITDate *)startTime; +// StartPositionLat +- (BOOL)isStartPositionLatValid; +- (FITSInt32)getStartPositionLat; +- (void)setStartPositionLat:(FITSInt32)startPositionLat; +// StartPositionLong +- (BOOL)isStartPositionLongValid; +- (FITSInt32)getStartPositionLong; +- (void)setStartPositionLong:(FITSInt32)startPositionLong; +// EndPositionLat +- (BOOL)isEndPositionLatValid; +- (FITSInt32)getEndPositionLat; +- (void)setEndPositionLat:(FITSInt32)endPositionLat; +// EndPositionLong +- (BOOL)isEndPositionLongValid; +- (FITSInt32)getEndPositionLong; +- (void)setEndPositionLong:(FITSInt32)endPositionLong; +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid; +- (FITFloat32)getTotalElapsedTime; +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime; +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid; +- (FITFloat32)getTotalTimerTime; +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime; +// TotalDistance +- (BOOL)isTotalDistanceValid; +- (FITFloat32)getTotalDistance; +- (void)setTotalDistance:(FITFloat32)totalDistance; +// TotalCycles +- (BOOL)isTotalCyclesValid; +- (FITUInt32)getTotalCycles; +- (void)setTotalCycles:(FITUInt32)totalCycles; +// TotalCycles Sub Fields +- (BOOL)isTotalStrokesValid; +- (FITUInt32) getTotalStrokes; +- (void)setTotalStrokes:(FITUInt32)totalStrokes; +// TotalCalories +- (BOOL)isTotalCaloriesValid; +- (FITUInt16)getTotalCalories; +- (void)setTotalCalories:(FITUInt16)totalCalories; +// TotalFatCalories +- (BOOL)isTotalFatCaloriesValid; +- (FITUInt16)getTotalFatCalories; +- (void)setTotalFatCalories:(FITUInt16)totalFatCalories; +// AvgSpeed +- (BOOL)isAvgSpeedValid; +- (FITFloat32)getAvgSpeed; +- (void)setAvgSpeed:(FITFloat32)avgSpeed; +// MaxSpeed +- (BOOL)isMaxSpeedValid; +- (FITFloat32)getMaxSpeed; +- (void)setMaxSpeed:(FITFloat32)maxSpeed; +// AvgHeartRate +- (BOOL)isAvgHeartRateValid; +- (FITUInt8)getAvgHeartRate; +- (void)setAvgHeartRate:(FITUInt8)avgHeartRate; +// MaxHeartRate +- (BOOL)isMaxHeartRateValid; +- (FITUInt8)getMaxHeartRate; +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate; +// AvgCadence +- (BOOL)isAvgCadenceValid; +- (FITUInt8)getAvgCadence; +- (void)setAvgCadence:(FITUInt8)avgCadence; +// MaxCadence +- (BOOL)isMaxCadenceValid; +- (FITUInt8)getMaxCadence; +- (void)setMaxCadence:(FITUInt8)maxCadence; +// AvgPower +- (BOOL)isAvgPowerValid; +- (FITUInt16)getAvgPower; +- (void)setAvgPower:(FITUInt16)avgPower; +// MaxPower +- (BOOL)isMaxPowerValid; +- (FITUInt16)getMaxPower; +- (void)setMaxPower:(FITUInt16)maxPower; +// TotalAscent +- (BOOL)isTotalAscentValid; +- (FITUInt16)getTotalAscent; +- (void)setTotalAscent:(FITUInt16)totalAscent; +// TotalDescent +- (BOOL)isTotalDescentValid; +- (FITUInt16)getTotalDescent; +- (void)setTotalDescent:(FITUInt16)totalDescent; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// EventGroup +- (BOOL)isEventGroupValid; +- (FITUInt8)getEventGroup; +- (void)setEventGroup:(FITUInt8)eventGroup; +// NecLat +- (BOOL)isNecLatValid; +- (FITSInt32)getNecLat; +- (void)setNecLat:(FITSInt32)necLat; +// NecLong +- (BOOL)isNecLongValid; +- (FITSInt32)getNecLong; +- (void)setNecLong:(FITSInt32)necLong; +// SwcLat +- (BOOL)isSwcLatValid; +- (FITSInt32)getSwcLat; +- (void)setSwcLat:(FITSInt32)swcLat; +// SwcLong +- (BOOL)isSwcLongValid; +- (FITSInt32)getSwcLong; +- (void)setSwcLong:(FITSInt32)swcLong; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// NormalizedPower +- (BOOL)isNormalizedPowerValid; +- (FITUInt16)getNormalizedPower; +- (void)setNormalizedPower:(FITUInt16)normalizedPower; +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid; +- (FITLeftRightBalance100)getLeftRightBalance; +- (void)setLeftRightBalance:(FITLeftRightBalance100)leftRightBalance; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// TotalWork +- (BOOL)isTotalWorkValid; +- (FITUInt32)getTotalWork; +- (void)setTotalWork:(FITUInt32)totalWork; +// AvgAltitude +- (BOOL)isAvgAltitudeValid; +- (FITFloat32)getAvgAltitude; +- (void)setAvgAltitude:(FITFloat32)avgAltitude; +// MaxAltitude +- (BOOL)isMaxAltitudeValid; +- (FITFloat32)getMaxAltitude; +- (void)setMaxAltitude:(FITFloat32)maxAltitude; +// GpsAccuracy +- (BOOL)isGpsAccuracyValid; +- (FITUInt8)getGpsAccuracy; +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy; +// AvgGrade +- (BOOL)isAvgGradeValid; +- (FITFloat32)getAvgGrade; +- (void)setAvgGrade:(FITFloat32)avgGrade; +// AvgPosGrade +- (BOOL)isAvgPosGradeValid; +- (FITFloat32)getAvgPosGrade; +- (void)setAvgPosGrade:(FITFloat32)avgPosGrade; +// AvgNegGrade +- (BOOL)isAvgNegGradeValid; +- (FITFloat32)getAvgNegGrade; +- (void)setAvgNegGrade:(FITFloat32)avgNegGrade; +// MaxPosGrade +- (BOOL)isMaxPosGradeValid; +- (FITFloat32)getMaxPosGrade; +- (void)setMaxPosGrade:(FITFloat32)maxPosGrade; +// MaxNegGrade +- (BOOL)isMaxNegGradeValid; +- (FITFloat32)getMaxNegGrade; +- (void)setMaxNegGrade:(FITFloat32)maxNegGrade; +// AvgTemperature +- (BOOL)isAvgTemperatureValid; +- (FITSInt8)getAvgTemperature; +- (void)setAvgTemperature:(FITSInt8)avgTemperature; +// MaxTemperature +- (BOOL)isMaxTemperatureValid; +- (FITSInt8)getMaxTemperature; +- (void)setMaxTemperature:(FITSInt8)maxTemperature; +// TotalMovingTime +- (BOOL)isTotalMovingTimeValid; +- (FITFloat32)getTotalMovingTime; +- (void)setTotalMovingTime:(FITFloat32)totalMovingTime; +// AvgPosVerticalSpeed +- (BOOL)isAvgPosVerticalSpeedValid; +- (FITFloat32)getAvgPosVerticalSpeed; +- (void)setAvgPosVerticalSpeed:(FITFloat32)avgPosVerticalSpeed; +// AvgNegVerticalSpeed +- (BOOL)isAvgNegVerticalSpeedValid; +- (FITFloat32)getAvgNegVerticalSpeed; +- (void)setAvgNegVerticalSpeed:(FITFloat32)avgNegVerticalSpeed; +// MaxPosVerticalSpeed +- (BOOL)isMaxPosVerticalSpeedValid; +- (FITFloat32)getMaxPosVerticalSpeed; +- (void)setMaxPosVerticalSpeed:(FITFloat32)maxPosVerticalSpeed; +// MaxNegVerticalSpeed +- (BOOL)isMaxNegVerticalSpeedValid; +- (FITFloat32)getMaxNegVerticalSpeed; +- (void)setMaxNegVerticalSpeed:(FITFloat32)maxNegVerticalSpeed; +// TimeInHrZone +@property(readonly,nonatomic) uint8_t numTimeInHrZoneValues; +- (BOOL)isTimeInHrZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInHrZoneforIndex : (uint8_t)index; +- (void)setTimeInHrZone:(FITFloat32)timeInHrZone forIndex:(uint8_t)index; +// TimeInSpeedZone +@property(readonly,nonatomic) uint8_t numTimeInSpeedZoneValues; +- (BOOL)isTimeInSpeedZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInSpeedZoneforIndex : (uint8_t)index; +- (void)setTimeInSpeedZone:(FITFloat32)timeInSpeedZone forIndex:(uint8_t)index; +// TimeInCadenceZone +@property(readonly,nonatomic) uint8_t numTimeInCadenceZoneValues; +- (BOOL)isTimeInCadenceZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInCadenceZoneforIndex : (uint8_t)index; +- (void)setTimeInCadenceZone:(FITFloat32)timeInCadenceZone forIndex:(uint8_t)index; +// TimeInPowerZone +@property(readonly,nonatomic) uint8_t numTimeInPowerZoneValues; +- (BOOL)isTimeInPowerZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInPowerZoneforIndex : (uint8_t)index; +- (void)setTimeInPowerZone:(FITFloat32)timeInPowerZone forIndex:(uint8_t)index; +// RepetitionNum +- (BOOL)isRepetitionNumValid; +- (FITUInt16)getRepetitionNum; +- (void)setRepetitionNum:(FITUInt16)repetitionNum; +// MinAltitude +- (BOOL)isMinAltitudeValid; +- (FITFloat32)getMinAltitude; +- (void)setMinAltitude:(FITFloat32)minAltitude; +// MinHeartRate +- (BOOL)isMinHeartRateValid; +- (FITUInt8)getMinHeartRate; +- (void)setMinHeartRate:(FITUInt8)minHeartRate; +// ActiveTime +- (BOOL)isActiveTimeValid; +- (FITFloat32)getActiveTime; +- (void)setActiveTime:(FITFloat32)activeTime; +// WktStepIndex +- (BOOL)isWktStepIndexValid; +- (FITMessageIndex)getWktStepIndex; +- (void)setWktStepIndex:(FITMessageIndex)wktStepIndex; +// SportEvent +- (BOOL)isSportEventValid; +- (FITSportEvent)getSportEvent; +- (void)setSportEvent:(FITSportEvent)sportEvent; +// AvgLeftTorqueEffectiveness +- (BOOL)isAvgLeftTorqueEffectivenessValid; +- (FITFloat32)getAvgLeftTorqueEffectiveness; +- (void)setAvgLeftTorqueEffectiveness:(FITFloat32)avgLeftTorqueEffectiveness; +// AvgRightTorqueEffectiveness +- (BOOL)isAvgRightTorqueEffectivenessValid; +- (FITFloat32)getAvgRightTorqueEffectiveness; +- (void)setAvgRightTorqueEffectiveness:(FITFloat32)avgRightTorqueEffectiveness; +// AvgLeftPedalSmoothness +- (BOOL)isAvgLeftPedalSmoothnessValid; +- (FITFloat32)getAvgLeftPedalSmoothness; +- (void)setAvgLeftPedalSmoothness:(FITFloat32)avgLeftPedalSmoothness; +// AvgRightPedalSmoothness +- (BOOL)isAvgRightPedalSmoothnessValid; +- (FITFloat32)getAvgRightPedalSmoothness; +- (void)setAvgRightPedalSmoothness:(FITFloat32)avgRightPedalSmoothness; +// AvgCombinedPedalSmoothness +- (BOOL)isAvgCombinedPedalSmoothnessValid; +- (FITFloat32)getAvgCombinedPedalSmoothness; +- (void)setAvgCombinedPedalSmoothness:(FITFloat32)avgCombinedPedalSmoothness; +// Status +- (BOOL)isStatusValid; +- (FITSegmentLapStatus)getStatus; +- (void)setStatus:(FITSegmentLapStatus)status; +// Uuid +- (BOOL)isUuidValid; +- (NSString *)getUuid; +- (void)setUuid:(NSString *)uuid; +// AvgFractionalCadence +- (BOOL)isAvgFractionalCadenceValid; +- (FITFloat32)getAvgFractionalCadence; +- (void)setAvgFractionalCadence:(FITFloat32)avgFractionalCadence; +// MaxFractionalCadence +- (BOOL)isMaxFractionalCadenceValid; +- (FITFloat32)getMaxFractionalCadence; +- (void)setMaxFractionalCadence:(FITFloat32)maxFractionalCadence; +// TotalFractionalCycles +- (BOOL)isTotalFractionalCyclesValid; +- (FITFloat32)getTotalFractionalCycles; +- (void)setTotalFractionalCycles:(FITFloat32)totalFractionalCycles; +// FrontGearShiftCount +- (BOOL)isFrontGearShiftCountValid; +- (FITUInt16)getFrontGearShiftCount; +- (void)setFrontGearShiftCount:(FITUInt16)frontGearShiftCount; +// RearGearShiftCount +- (BOOL)isRearGearShiftCountValid; +- (FITUInt16)getRearGearShiftCount; +- (void)setRearGearShiftCount:(FITUInt16)rearGearShiftCount; +// TimeStanding +- (BOOL)isTimeStandingValid; +- (FITFloat32)getTimeStanding; +- (void)setTimeStanding:(FITFloat32)timeStanding; +// StandCount +- (BOOL)isStandCountValid; +- (FITUInt16)getStandCount; +- (void)setStandCount:(FITUInt16)standCount; +// AvgLeftPco +- (BOOL)isAvgLeftPcoValid; +- (FITSInt8)getAvgLeftPco; +- (void)setAvgLeftPco:(FITSInt8)avgLeftPco; +// AvgRightPco +- (BOOL)isAvgRightPcoValid; +- (FITSInt8)getAvgRightPco; +- (void)setAvgRightPco:(FITSInt8)avgRightPco; +// AvgLeftPowerPhase +@property(readonly,nonatomic) uint8_t numAvgLeftPowerPhaseValues; +- (BOOL)isAvgLeftPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgLeftPowerPhaseforIndex : (uint8_t)index; +- (void)setAvgLeftPowerPhase:(FITFloat32)avgLeftPowerPhase forIndex:(uint8_t)index; +// AvgLeftPowerPhasePeak +@property(readonly,nonatomic) uint8_t numAvgLeftPowerPhasePeakValues; +- (BOOL)isAvgLeftPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgLeftPowerPhasePeakforIndex : (uint8_t)index; +- (void)setAvgLeftPowerPhasePeak:(FITFloat32)avgLeftPowerPhasePeak forIndex:(uint8_t)index; +// AvgRightPowerPhase +@property(readonly,nonatomic) uint8_t numAvgRightPowerPhaseValues; +- (BOOL)isAvgRightPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgRightPowerPhaseforIndex : (uint8_t)index; +- (void)setAvgRightPowerPhase:(FITFloat32)avgRightPowerPhase forIndex:(uint8_t)index; +// AvgRightPowerPhasePeak +@property(readonly,nonatomic) uint8_t numAvgRightPowerPhasePeakValues; +- (BOOL)isAvgRightPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgRightPowerPhasePeakforIndex : (uint8_t)index; +- (void)setAvgRightPowerPhasePeak:(FITFloat32)avgRightPowerPhasePeak forIndex:(uint8_t)index; +// AvgPowerPosition +@property(readonly,nonatomic) uint8_t numAvgPowerPositionValues; +- (BOOL)isAvgPowerPositionValidforIndex : (uint8_t)index; +- (FITUInt16)getAvgPowerPositionforIndex : (uint8_t)index; +- (void)setAvgPowerPosition:(FITUInt16)avgPowerPosition forIndex:(uint8_t)index; +// MaxPowerPosition +@property(readonly,nonatomic) uint8_t numMaxPowerPositionValues; +- (BOOL)isMaxPowerPositionValidforIndex : (uint8_t)index; +- (FITUInt16)getMaxPowerPositionforIndex : (uint8_t)index; +- (void)setMaxPowerPosition:(FITUInt16)maxPowerPosition forIndex:(uint8_t)index; +// AvgCadencePosition +@property(readonly,nonatomic) uint8_t numAvgCadencePositionValues; +- (BOOL)isAvgCadencePositionValidforIndex : (uint8_t)index; +- (FITUInt8)getAvgCadencePositionforIndex : (uint8_t)index; +- (void)setAvgCadencePosition:(FITUInt8)avgCadencePosition forIndex:(uint8_t)index; +// MaxCadencePosition +@property(readonly,nonatomic) uint8_t numMaxCadencePositionValues; +- (BOOL)isMaxCadencePositionValidforIndex : (uint8_t)index; +- (FITUInt8)getMaxCadencePositionforIndex : (uint8_t)index; +- (void)setMaxCadencePosition:(FITUInt8)maxCadencePosition forIndex:(uint8_t)index; +// Manufacturer +- (BOOL)isManufacturerValid; +- (FITManufacturer)getManufacturer; +- (void)setManufacturer:(FITManufacturer)manufacturer; +// TotalGrit +- (BOOL)isTotalGritValid; +- (FITFloat32)getTotalGrit; +- (void)setTotalGrit:(FITFloat32)totalGrit; +// TotalFlow +- (BOOL)isTotalFlowValid; +- (FITFloat32)getTotalFlow; +- (void)setTotalFlow:(FITFloat32)totalFlow; +// AvgGrit +- (BOOL)isAvgGritValid; +- (FITFloat32)getAvgGrit; +- (void)setAvgGrit:(FITFloat32)avgGrit; +// AvgFlow +- (BOOL)isAvgFlowValid; +- (FITFloat32)getAvgFlow; +- (void)setAvgFlow:(FITFloat32)avgFlow; +// TotalFractionalAscent +- (BOOL)isTotalFractionalAscentValid; +- (FITFloat32)getTotalFractionalAscent; +- (void)setTotalFractionalAscent:(FITFloat32)totalFractionalAscent; +// TotalFractionalDescent +- (BOOL)isTotalFractionalDescentValid; +- (FITFloat32)getTotalFractionalDescent; +- (void)setTotalFractionalDescent:(FITFloat32)totalFractionalDescent; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSegmentLeaderboardEntryMesg.h b/Sources/ObjcFIT/include/FITSegmentLeaderboardEntryMesg.h new file mode 100644 index 0000000..99ababe --- /dev/null +++ b/Sources/ObjcFIT/include/FITSegmentLeaderboardEntryMesg.h @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSegmentLeaderboardEntryMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; +// Type +- (BOOL)isTypeValid; +- (FITSegmentLeaderboardType)getType; +- (void)setType:(FITSegmentLeaderboardType)type; +// GroupPrimaryKey +- (BOOL)isGroupPrimaryKeyValid; +- (FITUInt32)getGroupPrimaryKey; +- (void)setGroupPrimaryKey:(FITUInt32)groupPrimaryKey; +// ActivityId +- (BOOL)isActivityIdValid; +- (FITUInt32)getActivityId; +- (void)setActivityId:(FITUInt32)activityId; +// SegmentTime +- (BOOL)isSegmentTimeValid; +- (FITFloat32)getSegmentTime; +- (void)setSegmentTime:(FITFloat32)segmentTime; +// ActivityIdString +- (BOOL)isActivityIdStringValid; +- (NSString *)getActivityIdString; +- (void)setActivityIdString:(NSString *)activityIdString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSegmentPointMesg.h b/Sources/ObjcFIT/include/FITSegmentPointMesg.h new file mode 100644 index 0000000..7f1ee76 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSegmentPointMesg.h @@ -0,0 +1,50 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSegmentPointMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// PositionLat +- (BOOL)isPositionLatValid; +- (FITSInt32)getPositionLat; +- (void)setPositionLat:(FITSInt32)positionLat; +// PositionLong +- (BOOL)isPositionLongValid; +- (FITSInt32)getPositionLong; +- (void)setPositionLong:(FITSInt32)positionLong; +// Distance +- (BOOL)isDistanceValid; +- (FITFloat32)getDistance; +- (void)setDistance:(FITFloat32)distance; +// Altitude +- (BOOL)isAltitudeValid; +- (FITFloat32)getAltitude; +- (void)setAltitude:(FITFloat32)altitude; +// LeaderTime +@property(readonly,nonatomic) uint8_t numLeaderTimeValues; +- (BOOL)isLeaderTimeValidforIndex : (uint8_t)index; +- (FITFloat32)getLeaderTimeforIndex : (uint8_t)index; +- (void)setLeaderTime:(FITFloat32)leaderTime forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSessionMesg.h b/Sources/ObjcFIT/include/FITSessionMesg.h new file mode 100644 index 0000000..9560c31 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSessionMesg.h @@ -0,0 +1,585 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSessionMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Event +- (BOOL)isEventValid; +- (FITEvent)getEvent; +- (void)setEvent:(FITEvent)event; +// EventType +- (BOOL)isEventTypeValid; +- (FITEventType)getEventType; +- (void)setEventType:(FITEventType)eventType; +// StartTime +- (BOOL)isStartTimeValid; +- (FITDate *)getStartTime; +- (void)setStartTime:(FITDate *)startTime; +// StartPositionLat +- (BOOL)isStartPositionLatValid; +- (FITSInt32)getStartPositionLat; +- (void)setStartPositionLat:(FITSInt32)startPositionLat; +// StartPositionLong +- (BOOL)isStartPositionLongValid; +- (FITSInt32)getStartPositionLong; +- (void)setStartPositionLong:(FITSInt32)startPositionLong; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// TotalElapsedTime +- (BOOL)isTotalElapsedTimeValid; +- (FITFloat32)getTotalElapsedTime; +- (void)setTotalElapsedTime:(FITFloat32)totalElapsedTime; +// TotalTimerTime +- (BOOL)isTotalTimerTimeValid; +- (FITFloat32)getTotalTimerTime; +- (void)setTotalTimerTime:(FITFloat32)totalTimerTime; +// TotalDistance +- (BOOL)isTotalDistanceValid; +- (FITFloat32)getTotalDistance; +- (void)setTotalDistance:(FITFloat32)totalDistance; +// TotalCycles +- (BOOL)isTotalCyclesValid; +- (FITUInt32)getTotalCycles; +- (void)setTotalCycles:(FITUInt32)totalCycles; +// TotalCycles Sub Fields +- (BOOL)isTotalStridesValid; +- (FITUInt32) getTotalStrides; +- (void)setTotalStrides:(FITUInt32)totalStrides; +- (BOOL)isTotalStrokesValid; +- (FITUInt32) getTotalStrokes; +- (void)setTotalStrokes:(FITUInt32)totalStrokes; +// TotalCalories +- (BOOL)isTotalCaloriesValid; +- (FITUInt16)getTotalCalories; +- (void)setTotalCalories:(FITUInt16)totalCalories; +// TotalFatCalories +- (BOOL)isTotalFatCaloriesValid; +- (FITUInt16)getTotalFatCalories; +- (void)setTotalFatCalories:(FITUInt16)totalFatCalories; +// AvgSpeed +- (BOOL)isAvgSpeedValid; +- (FITFloat32)getAvgSpeed; +- (void)setAvgSpeed:(FITFloat32)avgSpeed; +// MaxSpeed +- (BOOL)isMaxSpeedValid; +- (FITFloat32)getMaxSpeed; +- (void)setMaxSpeed:(FITFloat32)maxSpeed; +// AvgHeartRate +- (BOOL)isAvgHeartRateValid; +- (FITUInt8)getAvgHeartRate; +- (void)setAvgHeartRate:(FITUInt8)avgHeartRate; +// MaxHeartRate +- (BOOL)isMaxHeartRateValid; +- (FITUInt8)getMaxHeartRate; +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate; +// AvgCadence +- (BOOL)isAvgCadenceValid; +- (FITUInt8)getAvgCadence; +- (void)setAvgCadence:(FITUInt8)avgCadence; +// AvgCadence Sub Fields +- (BOOL)isAvgRunningCadenceValid; +- (FITUInt8) getAvgRunningCadence; +- (void)setAvgRunningCadence:(FITUInt8)avgRunningCadence; +// MaxCadence +- (BOOL)isMaxCadenceValid; +- (FITUInt8)getMaxCadence; +- (void)setMaxCadence:(FITUInt8)maxCadence; +// MaxCadence Sub Fields +- (BOOL)isMaxRunningCadenceValid; +- (FITUInt8) getMaxRunningCadence; +- (void)setMaxRunningCadence:(FITUInt8)maxRunningCadence; +// AvgPower +- (BOOL)isAvgPowerValid; +- (FITUInt16)getAvgPower; +- (void)setAvgPower:(FITUInt16)avgPower; +// MaxPower +- (BOOL)isMaxPowerValid; +- (FITUInt16)getMaxPower; +- (void)setMaxPower:(FITUInt16)maxPower; +// TotalAscent +- (BOOL)isTotalAscentValid; +- (FITUInt16)getTotalAscent; +- (void)setTotalAscent:(FITUInt16)totalAscent; +// TotalDescent +- (BOOL)isTotalDescentValid; +- (FITUInt16)getTotalDescent; +- (void)setTotalDescent:(FITUInt16)totalDescent; +// TotalTrainingEffect +- (BOOL)isTotalTrainingEffectValid; +- (FITFloat32)getTotalTrainingEffect; +- (void)setTotalTrainingEffect:(FITFloat32)totalTrainingEffect; +// FirstLapIndex +- (BOOL)isFirstLapIndexValid; +- (FITUInt16)getFirstLapIndex; +- (void)setFirstLapIndex:(FITUInt16)firstLapIndex; +// NumLaps +- (BOOL)isNumLapsValid; +- (FITUInt16)getNumLaps; +- (void)setNumLaps:(FITUInt16)numLaps; +// EventGroup +- (BOOL)isEventGroupValid; +- (FITUInt8)getEventGroup; +- (void)setEventGroup:(FITUInt8)eventGroup; +// Trigger +- (BOOL)isTriggerValid; +- (FITSessionTrigger)getTrigger; +- (void)setTrigger:(FITSessionTrigger)trigger; +// NecLat +- (BOOL)isNecLatValid; +- (FITSInt32)getNecLat; +- (void)setNecLat:(FITSInt32)necLat; +// NecLong +- (BOOL)isNecLongValid; +- (FITSInt32)getNecLong; +- (void)setNecLong:(FITSInt32)necLong; +// SwcLat +- (BOOL)isSwcLatValid; +- (FITSInt32)getSwcLat; +- (void)setSwcLat:(FITSInt32)swcLat; +// SwcLong +- (BOOL)isSwcLongValid; +- (FITSInt32)getSwcLong; +- (void)setSwcLong:(FITSInt32)swcLong; +// NumLengths +- (BOOL)isNumLengthsValid; +- (FITUInt16)getNumLengths; +- (void)setNumLengths:(FITUInt16)numLengths; +// NormalizedPower +- (BOOL)isNormalizedPowerValid; +- (FITUInt16)getNormalizedPower; +- (void)setNormalizedPower:(FITUInt16)normalizedPower; +// TrainingStressScore +- (BOOL)isTrainingStressScoreValid; +- (FITFloat32)getTrainingStressScore; +- (void)setTrainingStressScore:(FITFloat32)trainingStressScore; +// IntensityFactor +- (BOOL)isIntensityFactorValid; +- (FITFloat32)getIntensityFactor; +- (void)setIntensityFactor:(FITFloat32)intensityFactor; +// LeftRightBalance +- (BOOL)isLeftRightBalanceValid; +- (FITLeftRightBalance100)getLeftRightBalance; +- (void)setLeftRightBalance:(FITLeftRightBalance100)leftRightBalance; +// AvgStrokeCount +- (BOOL)isAvgStrokeCountValid; +- (FITFloat32)getAvgStrokeCount; +- (void)setAvgStrokeCount:(FITFloat32)avgStrokeCount; +// AvgStrokeDistance +- (BOOL)isAvgStrokeDistanceValid; +- (FITFloat32)getAvgStrokeDistance; +- (void)setAvgStrokeDistance:(FITFloat32)avgStrokeDistance; +// SwimStroke +- (BOOL)isSwimStrokeValid; +- (FITSwimStroke)getSwimStroke; +- (void)setSwimStroke:(FITSwimStroke)swimStroke; +// PoolLength +- (BOOL)isPoolLengthValid; +- (FITFloat32)getPoolLength; +- (void)setPoolLength:(FITFloat32)poolLength; +// ThresholdPower +- (BOOL)isThresholdPowerValid; +- (FITUInt16)getThresholdPower; +- (void)setThresholdPower:(FITUInt16)thresholdPower; +// PoolLengthUnit +- (BOOL)isPoolLengthUnitValid; +- (FITDisplayMeasure)getPoolLengthUnit; +- (void)setPoolLengthUnit:(FITDisplayMeasure)poolLengthUnit; +// NumActiveLengths +- (BOOL)isNumActiveLengthsValid; +- (FITUInt16)getNumActiveLengths; +- (void)setNumActiveLengths:(FITUInt16)numActiveLengths; +// TotalWork +- (BOOL)isTotalWorkValid; +- (FITUInt32)getTotalWork; +- (void)setTotalWork:(FITUInt32)totalWork; +// AvgAltitude +- (BOOL)isAvgAltitudeValid; +- (FITFloat32)getAvgAltitude; +- (void)setAvgAltitude:(FITFloat32)avgAltitude; +// MaxAltitude +- (BOOL)isMaxAltitudeValid; +- (FITFloat32)getMaxAltitude; +- (void)setMaxAltitude:(FITFloat32)maxAltitude; +// GpsAccuracy +- (BOOL)isGpsAccuracyValid; +- (FITUInt8)getGpsAccuracy; +- (void)setGpsAccuracy:(FITUInt8)gpsAccuracy; +// AvgGrade +- (BOOL)isAvgGradeValid; +- (FITFloat32)getAvgGrade; +- (void)setAvgGrade:(FITFloat32)avgGrade; +// AvgPosGrade +- (BOOL)isAvgPosGradeValid; +- (FITFloat32)getAvgPosGrade; +- (void)setAvgPosGrade:(FITFloat32)avgPosGrade; +// AvgNegGrade +- (BOOL)isAvgNegGradeValid; +- (FITFloat32)getAvgNegGrade; +- (void)setAvgNegGrade:(FITFloat32)avgNegGrade; +// MaxPosGrade +- (BOOL)isMaxPosGradeValid; +- (FITFloat32)getMaxPosGrade; +- (void)setMaxPosGrade:(FITFloat32)maxPosGrade; +// MaxNegGrade +- (BOOL)isMaxNegGradeValid; +- (FITFloat32)getMaxNegGrade; +- (void)setMaxNegGrade:(FITFloat32)maxNegGrade; +// AvgTemperature +- (BOOL)isAvgTemperatureValid; +- (FITSInt8)getAvgTemperature; +- (void)setAvgTemperature:(FITSInt8)avgTemperature; +// MaxTemperature +- (BOOL)isMaxTemperatureValid; +- (FITSInt8)getMaxTemperature; +- (void)setMaxTemperature:(FITSInt8)maxTemperature; +// TotalMovingTime +- (BOOL)isTotalMovingTimeValid; +- (FITFloat32)getTotalMovingTime; +- (void)setTotalMovingTime:(FITFloat32)totalMovingTime; +// AvgPosVerticalSpeed +- (BOOL)isAvgPosVerticalSpeedValid; +- (FITFloat32)getAvgPosVerticalSpeed; +- (void)setAvgPosVerticalSpeed:(FITFloat32)avgPosVerticalSpeed; +// AvgNegVerticalSpeed +- (BOOL)isAvgNegVerticalSpeedValid; +- (FITFloat32)getAvgNegVerticalSpeed; +- (void)setAvgNegVerticalSpeed:(FITFloat32)avgNegVerticalSpeed; +// MaxPosVerticalSpeed +- (BOOL)isMaxPosVerticalSpeedValid; +- (FITFloat32)getMaxPosVerticalSpeed; +- (void)setMaxPosVerticalSpeed:(FITFloat32)maxPosVerticalSpeed; +// MaxNegVerticalSpeed +- (BOOL)isMaxNegVerticalSpeedValid; +- (FITFloat32)getMaxNegVerticalSpeed; +- (void)setMaxNegVerticalSpeed:(FITFloat32)maxNegVerticalSpeed; +// MinHeartRate +- (BOOL)isMinHeartRateValid; +- (FITUInt8)getMinHeartRate; +- (void)setMinHeartRate:(FITUInt8)minHeartRate; +// TimeInHrZone +@property(readonly,nonatomic) uint8_t numTimeInHrZoneValues; +- (BOOL)isTimeInHrZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInHrZoneforIndex : (uint8_t)index; +- (void)setTimeInHrZone:(FITFloat32)timeInHrZone forIndex:(uint8_t)index; +// TimeInSpeedZone +@property(readonly,nonatomic) uint8_t numTimeInSpeedZoneValues; +- (BOOL)isTimeInSpeedZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInSpeedZoneforIndex : (uint8_t)index; +- (void)setTimeInSpeedZone:(FITFloat32)timeInSpeedZone forIndex:(uint8_t)index; +// TimeInCadenceZone +@property(readonly,nonatomic) uint8_t numTimeInCadenceZoneValues; +- (BOOL)isTimeInCadenceZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInCadenceZoneforIndex : (uint8_t)index; +- (void)setTimeInCadenceZone:(FITFloat32)timeInCadenceZone forIndex:(uint8_t)index; +// TimeInPowerZone +@property(readonly,nonatomic) uint8_t numTimeInPowerZoneValues; +- (BOOL)isTimeInPowerZoneValidforIndex : (uint8_t)index; +- (FITFloat32)getTimeInPowerZoneforIndex : (uint8_t)index; +- (void)setTimeInPowerZone:(FITFloat32)timeInPowerZone forIndex:(uint8_t)index; +// AvgLapTime +- (BOOL)isAvgLapTimeValid; +- (FITFloat32)getAvgLapTime; +- (void)setAvgLapTime:(FITFloat32)avgLapTime; +// BestLapIndex +- (BOOL)isBestLapIndexValid; +- (FITUInt16)getBestLapIndex; +- (void)setBestLapIndex:(FITUInt16)bestLapIndex; +// MinAltitude +- (BOOL)isMinAltitudeValid; +- (FITFloat32)getMinAltitude; +- (void)setMinAltitude:(FITFloat32)minAltitude; +// PlayerScore +- (BOOL)isPlayerScoreValid; +- (FITUInt16)getPlayerScore; +- (void)setPlayerScore:(FITUInt16)playerScore; +// OpponentScore +- (BOOL)isOpponentScoreValid; +- (FITUInt16)getOpponentScore; +- (void)setOpponentScore:(FITUInt16)opponentScore; +// OpponentName +- (BOOL)isOpponentNameValid; +- (NSString *)getOpponentName; +- (void)setOpponentName:(NSString *)opponentName; +// StrokeCount +@property(readonly,nonatomic) uint8_t numStrokeCountValues; +- (BOOL)isStrokeCountValidforIndex : (uint8_t)index; +- (FITUInt16)getStrokeCountforIndex : (uint8_t)index; +- (void)setStrokeCount:(FITUInt16)strokeCount forIndex:(uint8_t)index; +// ZoneCount +@property(readonly,nonatomic) uint8_t numZoneCountValues; +- (BOOL)isZoneCountValidforIndex : (uint8_t)index; +- (FITUInt16)getZoneCountforIndex : (uint8_t)index; +- (void)setZoneCount:(FITUInt16)zoneCount forIndex:(uint8_t)index; +// MaxBallSpeed +- (BOOL)isMaxBallSpeedValid; +- (FITFloat32)getMaxBallSpeed; +- (void)setMaxBallSpeed:(FITFloat32)maxBallSpeed; +// AvgBallSpeed +- (BOOL)isAvgBallSpeedValid; +- (FITFloat32)getAvgBallSpeed; +- (void)setAvgBallSpeed:(FITFloat32)avgBallSpeed; +// AvgVerticalOscillation +- (BOOL)isAvgVerticalOscillationValid; +- (FITFloat32)getAvgVerticalOscillation; +- (void)setAvgVerticalOscillation:(FITFloat32)avgVerticalOscillation; +// AvgStanceTimePercent +- (BOOL)isAvgStanceTimePercentValid; +- (FITFloat32)getAvgStanceTimePercent; +- (void)setAvgStanceTimePercent:(FITFloat32)avgStanceTimePercent; +// AvgStanceTime +- (BOOL)isAvgStanceTimeValid; +- (FITFloat32)getAvgStanceTime; +- (void)setAvgStanceTime:(FITFloat32)avgStanceTime; +// AvgFractionalCadence +- (BOOL)isAvgFractionalCadenceValid; +- (FITFloat32)getAvgFractionalCadence; +- (void)setAvgFractionalCadence:(FITFloat32)avgFractionalCadence; +// MaxFractionalCadence +- (BOOL)isMaxFractionalCadenceValid; +- (FITFloat32)getMaxFractionalCadence; +- (void)setMaxFractionalCadence:(FITFloat32)maxFractionalCadence; +// TotalFractionalCycles +- (BOOL)isTotalFractionalCyclesValid; +- (FITFloat32)getTotalFractionalCycles; +- (void)setTotalFractionalCycles:(FITFloat32)totalFractionalCycles; +// AvgTotalHemoglobinConc +@property(readonly,nonatomic) uint8_t numAvgTotalHemoglobinConcValues; +- (BOOL)isAvgTotalHemoglobinConcValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgTotalHemoglobinConcforIndex : (uint8_t)index; +- (void)setAvgTotalHemoglobinConc:(FITFloat32)avgTotalHemoglobinConc forIndex:(uint8_t)index; +// MinTotalHemoglobinConc +@property(readonly,nonatomic) uint8_t numMinTotalHemoglobinConcValues; +- (BOOL)isMinTotalHemoglobinConcValidforIndex : (uint8_t)index; +- (FITFloat32)getMinTotalHemoglobinConcforIndex : (uint8_t)index; +- (void)setMinTotalHemoglobinConc:(FITFloat32)minTotalHemoglobinConc forIndex:(uint8_t)index; +// MaxTotalHemoglobinConc +@property(readonly,nonatomic) uint8_t numMaxTotalHemoglobinConcValues; +- (BOOL)isMaxTotalHemoglobinConcValidforIndex : (uint8_t)index; +- (FITFloat32)getMaxTotalHemoglobinConcforIndex : (uint8_t)index; +- (void)setMaxTotalHemoglobinConc:(FITFloat32)maxTotalHemoglobinConc forIndex:(uint8_t)index; +// AvgSaturatedHemoglobinPercent +@property(readonly,nonatomic) uint8_t numAvgSaturatedHemoglobinPercentValues; +- (BOOL)isAvgSaturatedHemoglobinPercentValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgSaturatedHemoglobinPercentforIndex : (uint8_t)index; +- (void)setAvgSaturatedHemoglobinPercent:(FITFloat32)avgSaturatedHemoglobinPercent forIndex:(uint8_t)index; +// MinSaturatedHemoglobinPercent +@property(readonly,nonatomic) uint8_t numMinSaturatedHemoglobinPercentValues; +- (BOOL)isMinSaturatedHemoglobinPercentValidforIndex : (uint8_t)index; +- (FITFloat32)getMinSaturatedHemoglobinPercentforIndex : (uint8_t)index; +- (void)setMinSaturatedHemoglobinPercent:(FITFloat32)minSaturatedHemoglobinPercent forIndex:(uint8_t)index; +// MaxSaturatedHemoglobinPercent +@property(readonly,nonatomic) uint8_t numMaxSaturatedHemoglobinPercentValues; +- (BOOL)isMaxSaturatedHemoglobinPercentValidforIndex : (uint8_t)index; +- (FITFloat32)getMaxSaturatedHemoglobinPercentforIndex : (uint8_t)index; +- (void)setMaxSaturatedHemoglobinPercent:(FITFloat32)maxSaturatedHemoglobinPercent forIndex:(uint8_t)index; +// AvgLeftTorqueEffectiveness +- (BOOL)isAvgLeftTorqueEffectivenessValid; +- (FITFloat32)getAvgLeftTorqueEffectiveness; +- (void)setAvgLeftTorqueEffectiveness:(FITFloat32)avgLeftTorqueEffectiveness; +// AvgRightTorqueEffectiveness +- (BOOL)isAvgRightTorqueEffectivenessValid; +- (FITFloat32)getAvgRightTorqueEffectiveness; +- (void)setAvgRightTorqueEffectiveness:(FITFloat32)avgRightTorqueEffectiveness; +// AvgLeftPedalSmoothness +- (BOOL)isAvgLeftPedalSmoothnessValid; +- (FITFloat32)getAvgLeftPedalSmoothness; +- (void)setAvgLeftPedalSmoothness:(FITFloat32)avgLeftPedalSmoothness; +// AvgRightPedalSmoothness +- (BOOL)isAvgRightPedalSmoothnessValid; +- (FITFloat32)getAvgRightPedalSmoothness; +- (void)setAvgRightPedalSmoothness:(FITFloat32)avgRightPedalSmoothness; +// AvgCombinedPedalSmoothness +- (BOOL)isAvgCombinedPedalSmoothnessValid; +- (FITFloat32)getAvgCombinedPedalSmoothness; +- (void)setAvgCombinedPedalSmoothness:(FITFloat32)avgCombinedPedalSmoothness; +// SportIndex +- (BOOL)isSportIndexValid; +- (FITUInt8)getSportIndex; +- (void)setSportIndex:(FITUInt8)sportIndex; +// TimeStanding +- (BOOL)isTimeStandingValid; +- (FITFloat32)getTimeStanding; +- (void)setTimeStanding:(FITFloat32)timeStanding; +// StandCount +- (BOOL)isStandCountValid; +- (FITUInt16)getStandCount; +- (void)setStandCount:(FITUInt16)standCount; +// AvgLeftPco +- (BOOL)isAvgLeftPcoValid; +- (FITSInt8)getAvgLeftPco; +- (void)setAvgLeftPco:(FITSInt8)avgLeftPco; +// AvgRightPco +- (BOOL)isAvgRightPcoValid; +- (FITSInt8)getAvgRightPco; +- (void)setAvgRightPco:(FITSInt8)avgRightPco; +// AvgLeftPowerPhase +@property(readonly,nonatomic) uint8_t numAvgLeftPowerPhaseValues; +- (BOOL)isAvgLeftPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgLeftPowerPhaseforIndex : (uint8_t)index; +- (void)setAvgLeftPowerPhase:(FITFloat32)avgLeftPowerPhase forIndex:(uint8_t)index; +// AvgLeftPowerPhasePeak +@property(readonly,nonatomic) uint8_t numAvgLeftPowerPhasePeakValues; +- (BOOL)isAvgLeftPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgLeftPowerPhasePeakforIndex : (uint8_t)index; +- (void)setAvgLeftPowerPhasePeak:(FITFloat32)avgLeftPowerPhasePeak forIndex:(uint8_t)index; +// AvgRightPowerPhase +@property(readonly,nonatomic) uint8_t numAvgRightPowerPhaseValues; +- (BOOL)isAvgRightPowerPhaseValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgRightPowerPhaseforIndex : (uint8_t)index; +- (void)setAvgRightPowerPhase:(FITFloat32)avgRightPowerPhase forIndex:(uint8_t)index; +// AvgRightPowerPhasePeak +@property(readonly,nonatomic) uint8_t numAvgRightPowerPhasePeakValues; +- (BOOL)isAvgRightPowerPhasePeakValidforIndex : (uint8_t)index; +- (FITFloat32)getAvgRightPowerPhasePeakforIndex : (uint8_t)index; +- (void)setAvgRightPowerPhasePeak:(FITFloat32)avgRightPowerPhasePeak forIndex:(uint8_t)index; +// AvgPowerPosition +@property(readonly,nonatomic) uint8_t numAvgPowerPositionValues; +- (BOOL)isAvgPowerPositionValidforIndex : (uint8_t)index; +- (FITUInt16)getAvgPowerPositionforIndex : (uint8_t)index; +- (void)setAvgPowerPosition:(FITUInt16)avgPowerPosition forIndex:(uint8_t)index; +// MaxPowerPosition +@property(readonly,nonatomic) uint8_t numMaxPowerPositionValues; +- (BOOL)isMaxPowerPositionValidforIndex : (uint8_t)index; +- (FITUInt16)getMaxPowerPositionforIndex : (uint8_t)index; +- (void)setMaxPowerPosition:(FITUInt16)maxPowerPosition forIndex:(uint8_t)index; +// AvgCadencePosition +@property(readonly,nonatomic) uint8_t numAvgCadencePositionValues; +- (BOOL)isAvgCadencePositionValidforIndex : (uint8_t)index; +- (FITUInt8)getAvgCadencePositionforIndex : (uint8_t)index; +- (void)setAvgCadencePosition:(FITUInt8)avgCadencePosition forIndex:(uint8_t)index; +// MaxCadencePosition +@property(readonly,nonatomic) uint8_t numMaxCadencePositionValues; +- (BOOL)isMaxCadencePositionValidforIndex : (uint8_t)index; +- (FITUInt8)getMaxCadencePositionforIndex : (uint8_t)index; +- (void)setMaxCadencePosition:(FITUInt8)maxCadencePosition forIndex:(uint8_t)index; +// EnhancedAvgSpeed +- (BOOL)isEnhancedAvgSpeedValid; +- (FITFloat32)getEnhancedAvgSpeed; +- (void)setEnhancedAvgSpeed:(FITFloat32)enhancedAvgSpeed; +// EnhancedMaxSpeed +- (BOOL)isEnhancedMaxSpeedValid; +- (FITFloat32)getEnhancedMaxSpeed; +- (void)setEnhancedMaxSpeed:(FITFloat32)enhancedMaxSpeed; +// EnhancedAvgAltitude +- (BOOL)isEnhancedAvgAltitudeValid; +- (FITFloat32)getEnhancedAvgAltitude; +- (void)setEnhancedAvgAltitude:(FITFloat32)enhancedAvgAltitude; +// EnhancedMinAltitude +- (BOOL)isEnhancedMinAltitudeValid; +- (FITFloat32)getEnhancedMinAltitude; +- (void)setEnhancedMinAltitude:(FITFloat32)enhancedMinAltitude; +// EnhancedMaxAltitude +- (BOOL)isEnhancedMaxAltitudeValid; +- (FITFloat32)getEnhancedMaxAltitude; +- (void)setEnhancedMaxAltitude:(FITFloat32)enhancedMaxAltitude; +// AvgLevMotorPower +- (BOOL)isAvgLevMotorPowerValid; +- (FITUInt16)getAvgLevMotorPower; +- (void)setAvgLevMotorPower:(FITUInt16)avgLevMotorPower; +// MaxLevMotorPower +- (BOOL)isMaxLevMotorPowerValid; +- (FITUInt16)getMaxLevMotorPower; +- (void)setMaxLevMotorPower:(FITUInt16)maxLevMotorPower; +// LevBatteryConsumption +- (BOOL)isLevBatteryConsumptionValid; +- (FITFloat32)getLevBatteryConsumption; +- (void)setLevBatteryConsumption:(FITFloat32)levBatteryConsumption; +// AvgVerticalRatio +- (BOOL)isAvgVerticalRatioValid; +- (FITFloat32)getAvgVerticalRatio; +- (void)setAvgVerticalRatio:(FITFloat32)avgVerticalRatio; +// AvgStanceTimeBalance +- (BOOL)isAvgStanceTimeBalanceValid; +- (FITFloat32)getAvgStanceTimeBalance; +- (void)setAvgStanceTimeBalance:(FITFloat32)avgStanceTimeBalance; +// AvgStepLength +- (BOOL)isAvgStepLengthValid; +- (FITFloat32)getAvgStepLength; +- (void)setAvgStepLength:(FITFloat32)avgStepLength; +// TotalAnaerobicTrainingEffect +- (BOOL)isTotalAnaerobicTrainingEffectValid; +- (FITFloat32)getTotalAnaerobicTrainingEffect; +- (void)setTotalAnaerobicTrainingEffect:(FITFloat32)totalAnaerobicTrainingEffect; +// AvgVam +- (BOOL)isAvgVamValid; +- (FITFloat32)getAvgVam; +- (void)setAvgVam:(FITFloat32)avgVam; +// TrainingLoadPeak +- (BOOL)isTrainingLoadPeakValid; +- (FITFloat32)getTrainingLoadPeak; +- (void)setTrainingLoadPeak:(FITFloat32)trainingLoadPeak; +// TotalGrit +- (BOOL)isTotalGritValid; +- (FITFloat32)getTotalGrit; +- (void)setTotalGrit:(FITFloat32)totalGrit; +// TotalFlow +- (BOOL)isTotalFlowValid; +- (FITFloat32)getTotalFlow; +- (void)setTotalFlow:(FITFloat32)totalFlow; +// JumpCount +- (BOOL)isJumpCountValid; +- (FITUInt16)getJumpCount; +- (void)setJumpCount:(FITUInt16)jumpCount; +// AvgGrit +- (BOOL)isAvgGritValid; +- (FITFloat32)getAvgGrit; +- (void)setAvgGrit:(FITFloat32)avgGrit; +// AvgFlow +- (BOOL)isAvgFlowValid; +- (FITFloat32)getAvgFlow; +- (void)setAvgFlow:(FITFloat32)avgFlow; +// TotalFractionalAscent +- (BOOL)isTotalFractionalAscentValid; +- (FITFloat32)getTotalFractionalAscent; +- (void)setTotalFractionalAscent:(FITFloat32)totalFractionalAscent; +// TotalFractionalDescent +- (BOOL)isTotalFractionalDescentValid; +- (FITFloat32)getTotalFractionalDescent; +- (void)setTotalFractionalDescent:(FITFloat32)totalFractionalDescent; +// AvgCoreTemperature +- (BOOL)isAvgCoreTemperatureValid; +- (FITFloat32)getAvgCoreTemperature; +- (void)setAvgCoreTemperature:(FITFloat32)avgCoreTemperature; +// MinCoreTemperature +- (BOOL)isMinCoreTemperatureValid; +- (FITFloat32)getMinCoreTemperature; +- (void)setMinCoreTemperature:(FITFloat32)minCoreTemperature; +// MaxCoreTemperature +- (BOOL)isMaxCoreTemperatureValid; +- (FITFloat32)getMaxCoreTemperature; +- (void)setMaxCoreTemperature:(FITFloat32)maxCoreTemperature; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSetMesg.h b/Sources/ObjcFIT/include/FITSetMesg.h new file mode 100644 index 0000000..0765b02 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSetMesg.h @@ -0,0 +1,72 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSetMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Duration +- (BOOL)isDurationValid; +- (FITFloat32)getDuration; +- (void)setDuration:(FITFloat32)duration; +// Repetitions +- (BOOL)isRepetitionsValid; +- (FITUInt16)getRepetitions; +- (void)setRepetitions:(FITUInt16)repetitions; +// Weight +- (BOOL)isWeightValid; +- (FITFloat32)getWeight; +- (void)setWeight:(FITFloat32)weight; +// SetType +- (BOOL)isSetTypeValid; +- (FITSetType)getSetType; +- (void)setSetType:(FITSetType)setType; +// StartTime +- (BOOL)isStartTimeValid; +- (FITDate *)getStartTime; +- (void)setStartTime:(FITDate *)startTime; +// Category +@property(readonly,nonatomic) uint8_t numCategoryValues; +- (BOOL)isCategoryValidforIndex : (uint8_t)index; +- (FITExerciseCategory)getCategoryforIndex : (uint8_t)index; +- (void)setCategory:(FITExerciseCategory)category forIndex:(uint8_t)index; +// CategorySubtype +@property(readonly,nonatomic) uint8_t numCategorySubtypeValues; +- (BOOL)isCategorySubtypeValidforIndex : (uint8_t)index; +- (FITUInt16)getCategorySubtypeforIndex : (uint8_t)index; +- (void)setCategorySubtype:(FITUInt16)categorySubtype forIndex:(uint8_t)index; +// WeightDisplayUnit +- (BOOL)isWeightDisplayUnitValid; +- (FITFitBaseUnit)getWeightDisplayUnit; +- (void)setWeightDisplayUnit:(FITFitBaseUnit)weightDisplayUnit; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// WktStepIndex +- (BOOL)isWktStepIndexValid; +- (FITMessageIndex)getWktStepIndex; +- (void)setWktStepIndex:(FITMessageIndex)wktStepIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSlaveDeviceMesg.h b/Sources/ObjcFIT/include/FITSlaveDeviceMesg.h new file mode 100644 index 0000000..03f6352 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSlaveDeviceMesg.h @@ -0,0 +1,40 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSlaveDeviceMesg : FITMessage +- (id)init; +// Manufacturer +- (BOOL)isManufacturerValid; +- (FITManufacturer)getManufacturer; +- (void)setManufacturer:(FITManufacturer)manufacturer; +// Product +- (BOOL)isProductValid; +- (FITUInt16)getProduct; +- (void)setProduct:(FITUInt16)product; +// Product Sub Fields +- (BOOL)isFaveroProductValid; +- (FITFaveroProduct) getFaveroProduct; +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct; +- (BOOL)isGarminProductValid; +- (FITGarminProduct) getGarminProduct; +- (void)setGarminProduct:(FITGarminProduct)garminProduct; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSoftwareMesg.h b/Sources/ObjcFIT/include/FITSoftwareMesg.h new file mode 100644 index 0000000..c47011a --- /dev/null +++ b/Sources/ObjcFIT/include/FITSoftwareMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSoftwareMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Version +- (BOOL)isVersionValid; +- (FITFloat32)getVersion; +- (void)setVersion:(FITFloat32)version; +// PartNumber +- (BOOL)isPartNumberValid; +- (NSString *)getPartNumber; +- (void)setPartNumber:(NSString *)partNumber; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSpeedZoneMesg.h b/Sources/ObjcFIT/include/FITSpeedZoneMesg.h new file mode 100644 index 0000000..7c7a7a3 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSpeedZoneMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSpeedZoneMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// HighValue +- (BOOL)isHighValueValid; +- (FITFloat32)getHighValue; +- (void)setHighValue:(FITFloat32)highValue; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITSportMesg.h b/Sources/ObjcFIT/include/FITSportMesg.h new file mode 100644 index 0000000..8a2b2c4 --- /dev/null +++ b/Sources/ObjcFIT/include/FITSportMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITSportMesg : FITMessage +- (id)init; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// Name +- (BOOL)isNameValid; +- (NSString *)getName; +- (void)setName:(NSString *)name; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITStressLevelMesg.h b/Sources/ObjcFIT/include/FITStressLevelMesg.h new file mode 100644 index 0000000..602928b --- /dev/null +++ b/Sources/ObjcFIT/include/FITStressLevelMesg.h @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITStressLevelMesg : FITMessage +- (id)init; +// StressLevelValue +- (BOOL)isStressLevelValueValid; +- (FITSInt16)getStressLevelValue; +- (void)setStressLevelValue:(FITSInt16)stressLevelValue; +// StressLevelTime +- (BOOL)isStressLevelTimeValid; +- (FITDate *)getStressLevelTime; +- (void)setStressLevelTime:(FITDate *)stressLevelTime; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITThreeDSensorCalibrationMesg.h b/Sources/ObjcFIT/include/FITThreeDSensorCalibrationMesg.h new file mode 100644 index 0000000..5249ba3 --- /dev/null +++ b/Sources/ObjcFIT/include/FITThreeDSensorCalibrationMesg.h @@ -0,0 +1,63 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITThreeDSensorCalibrationMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// SensorType +- (BOOL)isSensorTypeValid; +- (FITSensorType)getSensorType; +- (void)setSensorType:(FITSensorType)sensorType; +// CalibrationFactor +- (BOOL)isCalibrationFactorValid; +- (FITUInt32)getCalibrationFactor; +- (void)setCalibrationFactor:(FITUInt32)calibrationFactor; +// CalibrationFactor Sub Fields +- (BOOL)isAccelCalFactorValid; +- (FITUInt32) getAccelCalFactor; +- (void)setAccelCalFactor:(FITUInt32)accelCalFactor; +- (BOOL)isGyroCalFactorValid; +- (FITUInt32) getGyroCalFactor; +- (void)setGyroCalFactor:(FITUInt32)gyroCalFactor; +// CalibrationDivisor +- (BOOL)isCalibrationDivisorValid; +- (FITUInt32)getCalibrationDivisor; +- (void)setCalibrationDivisor:(FITUInt32)calibrationDivisor; +// LevelShift +- (BOOL)isLevelShiftValid; +- (FITUInt32)getLevelShift; +- (void)setLevelShift:(FITUInt32)levelShift; +// OffsetCal +@property(readonly,nonatomic) uint8_t numOffsetCalValues; +- (BOOL)isOffsetCalValidforIndex : (uint8_t)index; +- (FITSInt32)getOffsetCalforIndex : (uint8_t)index; +- (void)setOffsetCal:(FITSInt32)offsetCal forIndex:(uint8_t)index; +// OrientationMatrix +@property(readonly,nonatomic) uint8_t numOrientationMatrixValues; +- (BOOL)isOrientationMatrixValidforIndex : (uint8_t)index; +- (FITFloat32)getOrientationMatrixforIndex : (uint8_t)index; +- (void)setOrientationMatrix:(FITFloat32)orientationMatrix forIndex:(uint8_t)index; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITTimestampCorrelationMesg.h b/Sources/ObjcFIT/include/FITTimestampCorrelationMesg.h new file mode 100644 index 0000000..bdc8a67 --- /dev/null +++ b/Sources/ObjcFIT/include/FITTimestampCorrelationMesg.h @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITTimestampCorrelationMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// FractionalTimestamp +- (BOOL)isFractionalTimestampValid; +- (FITFloat32)getFractionalTimestamp; +- (void)setFractionalTimestamp:(FITFloat32)fractionalTimestamp; +// SystemTimestamp +- (BOOL)isSystemTimestampValid; +- (FITDate *)getSystemTimestamp; +- (void)setSystemTimestamp:(FITDate *)systemTimestamp; +// FractionalSystemTimestamp +- (BOOL)isFractionalSystemTimestampValid; +- (FITFloat32)getFractionalSystemTimestamp; +- (void)setFractionalSystemTimestamp:(FITFloat32)fractionalSystemTimestamp; +// LocalTimestamp +- (BOOL)isLocalTimestampValid; +- (FITLocalDateTime)getLocalTimestamp; +- (void)setLocalTimestamp:(FITLocalDateTime)localTimestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// SystemTimestampMs +- (BOOL)isSystemTimestampMsValid; +- (FITUInt16)getSystemTimestampMs; +- (void)setSystemTimestampMs:(FITUInt16)systemTimestampMs; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITTotalsMesg.h b/Sources/ObjcFIT/include/FITTotalsMesg.h new file mode 100644 index 0000000..33ca1c4 --- /dev/null +++ b/Sources/ObjcFIT/include/FITTotalsMesg.h @@ -0,0 +1,66 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITTotalsMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimerTime +- (BOOL)isTimerTimeValid; +- (FITUInt32)getTimerTime; +- (void)setTimerTime:(FITUInt32)timerTime; +// Distance +- (BOOL)isDistanceValid; +- (FITUInt32)getDistance; +- (void)setDistance:(FITUInt32)distance; +// Calories +- (BOOL)isCaloriesValid; +- (FITUInt32)getCalories; +- (void)setCalories:(FITUInt32)calories; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// ElapsedTime +- (BOOL)isElapsedTimeValid; +- (FITUInt32)getElapsedTime; +- (void)setElapsedTime:(FITUInt32)elapsedTime; +// Sessions +- (BOOL)isSessionsValid; +- (FITUInt16)getSessions; +- (void)setSessions:(FITUInt16)sessions; +// ActiveTime +- (BOOL)isActiveTimeValid; +- (FITUInt32)getActiveTime; +- (void)setActiveTime:(FITUInt32)activeTime; +// SportIndex +- (BOOL)isSportIndexValid; +- (FITUInt8)getSportIndex; +- (void)setSportIndex:(FITUInt8)sportIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITTrainingFileMesg.h b/Sources/ObjcFIT/include/FITTrainingFileMesg.h new file mode 100644 index 0000000..40127fe --- /dev/null +++ b/Sources/ObjcFIT/include/FITTrainingFileMesg.h @@ -0,0 +1,57 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITTrainingFileMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Type +- (BOOL)isTypeValid; +- (FITFile)getType; +- (void)setType:(FITFile)type; +// Manufacturer +- (BOOL)isManufacturerValid; +- (FITManufacturer)getManufacturer; +- (void)setManufacturer:(FITManufacturer)manufacturer; +// Product +- (BOOL)isProductValid; +- (FITUInt16)getProduct; +- (void)setProduct:(FITUInt16)product; +// Product Sub Fields +- (BOOL)isFaveroProductValid; +- (FITFaveroProduct) getFaveroProduct; +- (void)setFaveroProduct:(FITFaveroProduct)faveroProduct; +- (BOOL)isGarminProductValid; +- (FITGarminProduct) getGarminProduct; +- (void)setGarminProduct:(FITGarminProduct)garminProduct; +// SerialNumber +- (BOOL)isSerialNumberValid; +- (FITUInt32z)getSerialNumber; +- (void)setSerialNumber:(FITUInt32z)serialNumber; +// TimeCreated +- (BOOL)isTimeCreatedValid; +- (FITDate *)getTimeCreated; +- (void)setTimeCreated:(FITDate *)timeCreated; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITTypes.h b/Sources/ObjcFIT/include/FITTypes.h new file mode 100644 index 0000000..afe5cf0 --- /dev/null +++ b/Sources/ObjcFIT/include/FITTypes.h @@ -0,0 +1,5740 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +// Base Types +typedef uint8_t FITEnum; +#define FITEnumInvalid ((FITEnum)0xFF) +typedef int8_t FITSInt8; +#define FITSInt8Invalid ((FITSInt8)0x7F) +typedef uint8_t FITUInt8; +#define FITUInt8Invalid ((FITUInt8)0xFF) +typedef int16_t FITSInt16; +#define FITSInt16Invalid ((FITSInt16)0x7FFF) +typedef uint16_t FITUInt16; +#define FITUInt16Invalid ((FIT_UINT16)0xFFFF) +typedef int32_t FITSInt32; +#define FITSInt32Invalid ((FITSInt32)0x7FFFFFFF) +typedef uint32_t FITUInt32; +#define FITUInt32Invalid ((FITUInt32)0xFFFFFFFF) +typedef float FITFloat32; +#define FITFloat32Invalid ((FITFloat32) 0xFFFFFFFFFFFFFFFF) +typedef double FITFloat64; +#define FITFloat64Invalid ((FITFloat64) 0xFFFFFFFFFFFFFFFF) +typedef uint8_t FITUInt8z; +#define FITUInt8zInvalid ((FITUInt8z)0x00) +typedef uint16_t FITUInt16z; +#define FITUInt16zInvalid ((FITUInt16z)0x0000) +typedef uint32_t FITUInt32z; +#define FITUInt32zInvalid ((FITUInt32z)0x00000000) +typedef uint8_t FITByte; +#define FITByteInvalid ((FITByte)0xFF) +typedef int64_t FITSInt64; +#define FITSInt64Invalid ((FITSInt64)0x7FFFFFFFFFFFFFFFL) +typedef uint64_t FITUInt64; +#define FITUInt64Invalid ((FITUInt64)0xFFFFFFFFFFFFFFFFL) +typedef uint64_t FITUInt64z; +#define FITUInt64zInvalid ((FITUInt64z)0x0000000000000000L) +typedef FITEnum FITBool; +#define FITBoolInvalid FITEnumInvalid +#define FITBoolFalse ((FITBool)0) +#define FITBoolTrue ((FITBool)1) + +// Profile Types + +typedef FITEnum FITFile; +#define FITFileInvalid FITEnumInvalid +#define FITFileDevice ((FITFile)1) // Read only, single file. Must be in root directory. +#define FITFileSettings ((FITFile)2) // Read/write, single file. Directory=Settings +#define FITFileSport ((FITFile)3) // Read/write, multiple files, file number = sport type. Directory=Sports +#define FITFileActivity ((FITFile)4) // Read/erase, multiple files. Directory=Activities +#define FITFileWorkout ((FITFile)5) // Read/write/erase, multiple files. Directory=Workouts +#define FITFileCourse ((FITFile)6) // Read/write/erase, multiple files. Directory=Courses +#define FITFileSchedules ((FITFile)7) // Read/write, single file. Directory=Schedules +#define FITFileWeight ((FITFile)9) // Read only, single file. Circular buffer. All message definitions at start of file. Directory=Weight +#define FITFileTotals ((FITFile)10) // Read only, single file. Directory=Totals +#define FITFileGoals ((FITFile)11) // Read/write, single file. Directory=Goals +#define FITFileBloodPressure ((FITFile)14) // Read only. Directory=Blood Pressure +#define FITFileMonitoringA ((FITFile)15) // Read only. Directory=Monitoring. File number=sub type. +#define FITFileActivitySummary ((FITFile)20) // Read/erase, multiple files. Directory=Activities +#define FITFileMonitoringDaily ((FITFile)28) +#define FITFileMonitoringB ((FITFile)32) // Read only. Directory=Monitoring. File number=identifier +#define FITFileSegment ((FITFile)34) // Read/write/erase. Multiple Files. Directory=Segments +#define FITFileSegmentList ((FITFile)35) // Read/write/erase. Single File. Directory=Segments +#define FITFileExdConfiguration ((FITFile)40) // Read/write/erase. Single File. Directory=Settings +#define FITFileMfgRangeMin ((FITFile)0xF7) // 0xF7 - 0xFE reserved for manufacturer specific file types +#define FITFileMfgRangeMax ((FITFile)0xFE) // 0xF7 - 0xFE reserved for manufacturer specific file types +#define FITFileCount 20 + +typedef FITUInt16 FITMesgNum; +#define FITMesgNumInvalid FITUInt16Invalid +#define FITMesgNumFileId ((FITMesgNum)0) +#define FITMesgNumCapabilities ((FITMesgNum)1) +#define FITMesgNumDeviceSettings ((FITMesgNum)2) +#define FITMesgNumUserProfile ((FITMesgNum)3) +#define FITMesgNumHrmProfile ((FITMesgNum)4) +#define FITMesgNumSdmProfile ((FITMesgNum)5) +#define FITMesgNumBikeProfile ((FITMesgNum)6) +#define FITMesgNumZonesTarget ((FITMesgNum)7) +#define FITMesgNumHrZone ((FITMesgNum)8) +#define FITMesgNumPowerZone ((FITMesgNum)9) +#define FITMesgNumMetZone ((FITMesgNum)10) +#define FITMesgNumSport ((FITMesgNum)12) +#define FITMesgNumGoal ((FITMesgNum)15) +#define FITMesgNumSession ((FITMesgNum)18) +#define FITMesgNumLap ((FITMesgNum)19) +#define FITMesgNumRecord ((FITMesgNum)20) +#define FITMesgNumEvent ((FITMesgNum)21) +#define FITMesgNumDeviceInfo ((FITMesgNum)23) +#define FITMesgNumWorkout ((FITMesgNum)26) +#define FITMesgNumWorkoutStep ((FITMesgNum)27) +#define FITMesgNumSchedule ((FITMesgNum)28) +#define FITMesgNumWeightScale ((FITMesgNum)30) +#define FITMesgNumCourse ((FITMesgNum)31) +#define FITMesgNumCoursePoint ((FITMesgNum)32) +#define FITMesgNumTotals ((FITMesgNum)33) +#define FITMesgNumActivity ((FITMesgNum)34) +#define FITMesgNumSoftware ((FITMesgNum)35) +#define FITMesgNumFileCapabilities ((FITMesgNum)37) +#define FITMesgNumMesgCapabilities ((FITMesgNum)38) +#define FITMesgNumFieldCapabilities ((FITMesgNum)39) +#define FITMesgNumFileCreator ((FITMesgNum)49) +#define FITMesgNumBloodPressure ((FITMesgNum)51) +#define FITMesgNumSpeedZone ((FITMesgNum)53) +#define FITMesgNumMonitoring ((FITMesgNum)55) +#define FITMesgNumTrainingFile ((FITMesgNum)72) +#define FITMesgNumHrv ((FITMesgNum)78) +#define FITMesgNumAntRx ((FITMesgNum)80) +#define FITMesgNumAntTx ((FITMesgNum)81) +#define FITMesgNumAntChannelId ((FITMesgNum)82) +#define FITMesgNumLength ((FITMesgNum)101) +#define FITMesgNumMonitoringInfo ((FITMesgNum)103) +#define FITMesgNumPad ((FITMesgNum)105) +#define FITMesgNumSlaveDevice ((FITMesgNum)106) +#define FITMesgNumConnectivity ((FITMesgNum)127) +#define FITMesgNumWeatherConditions ((FITMesgNum)128) +#define FITMesgNumWeatherAlert ((FITMesgNum)129) +#define FITMesgNumCadenceZone ((FITMesgNum)131) +#define FITMesgNumHr ((FITMesgNum)132) +#define FITMesgNumSegmentLap ((FITMesgNum)142) +#define FITMesgNumMemoGlob ((FITMesgNum)145) +#define FITMesgNumSegmentId ((FITMesgNum)148) +#define FITMesgNumSegmentLeaderboardEntry ((FITMesgNum)149) +#define FITMesgNumSegmentPoint ((FITMesgNum)150) +#define FITMesgNumSegmentFile ((FITMesgNum)151) +#define FITMesgNumWorkoutSession ((FITMesgNum)158) +#define FITMesgNumWatchfaceSettings ((FITMesgNum)159) +#define FITMesgNumGpsMetadata ((FITMesgNum)160) +#define FITMesgNumCameraEvent ((FITMesgNum)161) +#define FITMesgNumTimestampCorrelation ((FITMesgNum)162) +#define FITMesgNumGyroscopeData ((FITMesgNum)164) +#define FITMesgNumAccelerometerData ((FITMesgNum)165) +#define FITMesgNumThreeDSensorCalibration ((FITMesgNum)167) +#define FITMesgNumVideoFrame ((FITMesgNum)169) +#define FITMesgNumObdiiData ((FITMesgNum)174) +#define FITMesgNumNmeaSentence ((FITMesgNum)177) +#define FITMesgNumAviationAttitude ((FITMesgNum)178) +#define FITMesgNumVideo ((FITMesgNum)184) +#define FITMesgNumVideoTitle ((FITMesgNum)185) +#define FITMesgNumVideoDescription ((FITMesgNum)186) +#define FITMesgNumVideoClip ((FITMesgNum)187) +#define FITMesgNumOhrSettings ((FITMesgNum)188) +#define FITMesgNumExdScreenConfiguration ((FITMesgNum)200) +#define FITMesgNumExdDataFieldConfiguration ((FITMesgNum)201) +#define FITMesgNumExdDataConceptConfiguration ((FITMesgNum)202) +#define FITMesgNumFieldDescription ((FITMesgNum)206) +#define FITMesgNumDeveloperDataId ((FITMesgNum)207) +#define FITMesgNumMagnetometerData ((FITMesgNum)208) +#define FITMesgNumBarometerData ((FITMesgNum)209) +#define FITMesgNumOneDSensorCalibration ((FITMesgNum)210) +#define FITMesgNumSet ((FITMesgNum)225) +#define FITMesgNumStressLevel ((FITMesgNum)227) +#define FITMesgNumDiveSettings ((FITMesgNum)258) +#define FITMesgNumDiveGas ((FITMesgNum)259) +#define FITMesgNumDiveAlarm ((FITMesgNum)262) +#define FITMesgNumExerciseTitle ((FITMesgNum)264) +#define FITMesgNumDiveSummary ((FITMesgNum)268) +#define FITMesgNumJump ((FITMesgNum)285) +#define FITMesgNumClimbPro ((FITMesgNum)317) +#define FITMesgNumDeviceAuxBatteryInfo ((FITMesgNum)375) +#define FITMesgNumMfgRangeMin ((FITMesgNum)0xFF00) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages +#define FITMesgNumMfgRangeMax ((FITMesgNum)0xFFFE) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages +#define FITMesgNumCount 91 + +typedef FITUInt8 FITChecksum; +#define FITChecksumInvalid FITUInt8Invalid +#define FITChecksumClear ((FITChecksum)0) // Allows clear of checksum for flash memory where can only write 1 to 0 without erasing sector. +#define FITChecksumOk ((FITChecksum)1) // Set to mark checksum as valid if computes to invalid values 0 or 0xFF. Checksum can also be set to ok to save encoding computation time. +#define FITChecksumCount 2 + +typedef FITUInt8z FITFileFlags; +#define FITFileFlagsInvalid FITUInt8zInvalid +#define FITFileFlagsRead ((FITFileFlags)0x02) +#define FITFileFlagsWrite ((FITFileFlags)0x04) +#define FITFileFlagsErase ((FITFileFlags)0x08) +#define FITFileFlagsCount 3 + +typedef FITEnum FITMesgCount; +#define FITMesgCountInvalid FITEnumInvalid +#define FITMesgCountNumPerFile ((FITMesgCount)0) +#define FITMesgCountMaxPerFile ((FITMesgCount)1) +#define FITMesgCountMaxPerFileType ((FITMesgCount)2) +#define FITMesgCountCount 3 + +typedef FITUInt32 FITDateTime; // seconds since UTC 00:00 Dec 31 1989 +#define FITDateTimeInvalid FITUInt32Invalid +#define FITDateTimeMin ((FITDateTime)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on) +#define FITDateTimeCount 1 + +typedef FITUInt32 FITLocalDateTime; // seconds since 00:00 Dec 31 1989 in local time zone +#define FITLocalDateTimeInvalid FITUInt32Invalid +#define FITLocalDateTimeMin ((FITLocalDateTime)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on) +#define FITLocalDateTimeCount 1 + +typedef FITUInt16 FITMessageIndex; +#define FITMessageIndexInvalid FITUInt16Invalid +#define FITMessageIndexSelected ((FITMessageIndex)0x8000) // message is selected if set +#define FITMessageIndexReserved ((FITMessageIndex)0x7000) // reserved (default 0) +#define FITMessageIndexMask ((FITMessageIndex)0x0FFF) // index +#define FITMessageIndexCount 3 + +typedef FITUInt8 FITDeviceIndex; +#define FITDeviceIndexInvalid FITUInt8Invalid +#define FITDeviceIndexCreator ((FITDeviceIndex)0) // Creator of the file is always device index 0. +#define FITDeviceIndexCount 1 + +typedef FITEnum FITGender; +#define FITGenderInvalid FITEnumInvalid +#define FITGenderFemale ((FITGender)0) +#define FITGenderMale ((FITGender)1) +#define FITGenderCount 2 + +typedef FITEnum FITLanguage; +#define FITLanguageInvalid FITEnumInvalid +#define FITLanguageEnglish ((FITLanguage)0) +#define FITLanguageFrench ((FITLanguage)1) +#define FITLanguageItalian ((FITLanguage)2) +#define FITLanguageGerman ((FITLanguage)3) +#define FITLanguageSpanish ((FITLanguage)4) +#define FITLanguageCroatian ((FITLanguage)5) +#define FITLanguageCzech ((FITLanguage)6) +#define FITLanguageDanish ((FITLanguage)7) +#define FITLanguageDutch ((FITLanguage)8) +#define FITLanguageFinnish ((FITLanguage)9) +#define FITLanguageGreek ((FITLanguage)10) +#define FITLanguageHungarian ((FITLanguage)11) +#define FITLanguageNorwegian ((FITLanguage)12) +#define FITLanguagePolish ((FITLanguage)13) +#define FITLanguagePortuguese ((FITLanguage)14) +#define FITLanguageSlovakian ((FITLanguage)15) +#define FITLanguageSlovenian ((FITLanguage)16) +#define FITLanguageSwedish ((FITLanguage)17) +#define FITLanguageRussian ((FITLanguage)18) +#define FITLanguageTurkish ((FITLanguage)19) +#define FITLanguageLatvian ((FITLanguage)20) +#define FITLanguageUkrainian ((FITLanguage)21) +#define FITLanguageArabic ((FITLanguage)22) +#define FITLanguageFarsi ((FITLanguage)23) +#define FITLanguageBulgarian ((FITLanguage)24) +#define FITLanguageRomanian ((FITLanguage)25) +#define FITLanguageChinese ((FITLanguage)26) +#define FITLanguageJapanese ((FITLanguage)27) +#define FITLanguageKorean ((FITLanguage)28) +#define FITLanguageTaiwanese ((FITLanguage)29) +#define FITLanguageThai ((FITLanguage)30) +#define FITLanguageHebrew ((FITLanguage)31) +#define FITLanguageBrazilianPortuguese ((FITLanguage)32) +#define FITLanguageIndonesian ((FITLanguage)33) +#define FITLanguageMalaysian ((FITLanguage)34) +#define FITLanguageVietnamese ((FITLanguage)35) +#define FITLanguageBurmese ((FITLanguage)36) +#define FITLanguageMongolian ((FITLanguage)37) +#define FITLanguageCustom ((FITLanguage)254) +#define FITLanguageCount 39 + +typedef FITUInt8z FITLanguageBits0; // Bit field corresponding to language enum type (1 << language). +#define FITLanguageBits0Invalid FITUInt8zInvalid +#define FITLanguageBits0English ((FITLanguageBits0)0x01) +#define FITLanguageBits0French ((FITLanguageBits0)0x02) +#define FITLanguageBits0Italian ((FITLanguageBits0)0x04) +#define FITLanguageBits0German ((FITLanguageBits0)0x08) +#define FITLanguageBits0Spanish ((FITLanguageBits0)0x10) +#define FITLanguageBits0Croatian ((FITLanguageBits0)0x20) +#define FITLanguageBits0Czech ((FITLanguageBits0)0x40) +#define FITLanguageBits0Danish ((FITLanguageBits0)0x80) +#define FITLanguageBits0Count 8 + +typedef FITUInt8z FITLanguageBits1; +#define FITLanguageBits1Invalid FITUInt8zInvalid +#define FITLanguageBits1Dutch ((FITLanguageBits1)0x01) +#define FITLanguageBits1Finnish ((FITLanguageBits1)0x02) +#define FITLanguageBits1Greek ((FITLanguageBits1)0x04) +#define FITLanguageBits1Hungarian ((FITLanguageBits1)0x08) +#define FITLanguageBits1Norwegian ((FITLanguageBits1)0x10) +#define FITLanguageBits1Polish ((FITLanguageBits1)0x20) +#define FITLanguageBits1Portuguese ((FITLanguageBits1)0x40) +#define FITLanguageBits1Slovakian ((FITLanguageBits1)0x80) +#define FITLanguageBits1Count 8 + +typedef FITUInt8z FITLanguageBits2; +#define FITLanguageBits2Invalid FITUInt8zInvalid +#define FITLanguageBits2Slovenian ((FITLanguageBits2)0x01) +#define FITLanguageBits2Swedish ((FITLanguageBits2)0x02) +#define FITLanguageBits2Russian ((FITLanguageBits2)0x04) +#define FITLanguageBits2Turkish ((FITLanguageBits2)0x08) +#define FITLanguageBits2Latvian ((FITLanguageBits2)0x10) +#define FITLanguageBits2Ukrainian ((FITLanguageBits2)0x20) +#define FITLanguageBits2Arabic ((FITLanguageBits2)0x40) +#define FITLanguageBits2Farsi ((FITLanguageBits2)0x80) +#define FITLanguageBits2Count 8 + +typedef FITUInt8z FITLanguageBits3; +#define FITLanguageBits3Invalid FITUInt8zInvalid +#define FITLanguageBits3Bulgarian ((FITLanguageBits3)0x01) +#define FITLanguageBits3Romanian ((FITLanguageBits3)0x02) +#define FITLanguageBits3Chinese ((FITLanguageBits3)0x04) +#define FITLanguageBits3Japanese ((FITLanguageBits3)0x08) +#define FITLanguageBits3Korean ((FITLanguageBits3)0x10) +#define FITLanguageBits3Taiwanese ((FITLanguageBits3)0x20) +#define FITLanguageBits3Thai ((FITLanguageBits3)0x40) +#define FITLanguageBits3Hebrew ((FITLanguageBits3)0x80) +#define FITLanguageBits3Count 8 + +typedef FITUInt8z FITLanguageBits4; +#define FITLanguageBits4Invalid FITUInt8zInvalid +#define FITLanguageBits4BrazilianPortuguese ((FITLanguageBits4)0x01) +#define FITLanguageBits4Indonesian ((FITLanguageBits4)0x02) +#define FITLanguageBits4Malaysian ((FITLanguageBits4)0x04) +#define FITLanguageBits4Vietnamese ((FITLanguageBits4)0x08) +#define FITLanguageBits4Burmese ((FITLanguageBits4)0x10) +#define FITLanguageBits4Mongolian ((FITLanguageBits4)0x20) +#define FITLanguageBits4Count 6 + +typedef FITEnum FITTimeZone; +#define FITTimeZoneInvalid FITEnumInvalid +#define FITTimeZoneAlmaty ((FITTimeZone)0) +#define FITTimeZoneBangkok ((FITTimeZone)1) +#define FITTimeZoneBombay ((FITTimeZone)2) +#define FITTimeZoneBrasilia ((FITTimeZone)3) +#define FITTimeZoneCairo ((FITTimeZone)4) +#define FITTimeZoneCapeVerdeIs ((FITTimeZone)5) +#define FITTimeZoneDarwin ((FITTimeZone)6) +#define FITTimeZoneEniwetok ((FITTimeZone)7) +#define FITTimeZoneFiji ((FITTimeZone)8) +#define FITTimeZoneHongKong ((FITTimeZone)9) +#define FITTimeZoneIslamabad ((FITTimeZone)10) +#define FITTimeZoneKabul ((FITTimeZone)11) +#define FITTimeZoneMagadan ((FITTimeZone)12) +#define FITTimeZoneMidAtlantic ((FITTimeZone)13) +#define FITTimeZoneMoscow ((FITTimeZone)14) +#define FITTimeZoneMuscat ((FITTimeZone)15) +#define FITTimeZoneNewfoundland ((FITTimeZone)16) +#define FITTimeZoneSamoa ((FITTimeZone)17) +#define FITTimeZoneSydney ((FITTimeZone)18) +#define FITTimeZoneTehran ((FITTimeZone)19) +#define FITTimeZoneTokyo ((FITTimeZone)20) +#define FITTimeZoneUsAlaska ((FITTimeZone)21) +#define FITTimeZoneUsAtlantic ((FITTimeZone)22) +#define FITTimeZoneUsCentral ((FITTimeZone)23) +#define FITTimeZoneUsEastern ((FITTimeZone)24) +#define FITTimeZoneUsHawaii ((FITTimeZone)25) +#define FITTimeZoneUsMountain ((FITTimeZone)26) +#define FITTimeZoneUsPacific ((FITTimeZone)27) +#define FITTimeZoneOther ((FITTimeZone)28) +#define FITTimeZoneAuckland ((FITTimeZone)29) +#define FITTimeZoneKathmandu ((FITTimeZone)30) +#define FITTimeZoneEuropeWesternWet ((FITTimeZone)31) +#define FITTimeZoneEuropeCentralCet ((FITTimeZone)32) +#define FITTimeZoneEuropeEasternEet ((FITTimeZone)33) +#define FITTimeZoneJakarta ((FITTimeZone)34) +#define FITTimeZonePerth ((FITTimeZone)35) +#define FITTimeZoneAdelaide ((FITTimeZone)36) +#define FITTimeZoneBrisbane ((FITTimeZone)37) +#define FITTimeZoneTasmania ((FITTimeZone)38) +#define FITTimeZoneIceland ((FITTimeZone)39) +#define FITTimeZoneAmsterdam ((FITTimeZone)40) +#define FITTimeZoneAthens ((FITTimeZone)41) +#define FITTimeZoneBarcelona ((FITTimeZone)42) +#define FITTimeZoneBerlin ((FITTimeZone)43) +#define FITTimeZoneBrussels ((FITTimeZone)44) +#define FITTimeZoneBudapest ((FITTimeZone)45) +#define FITTimeZoneCopenhagen ((FITTimeZone)46) +#define FITTimeZoneDublin ((FITTimeZone)47) +#define FITTimeZoneHelsinki ((FITTimeZone)48) +#define FITTimeZoneLisbon ((FITTimeZone)49) +#define FITTimeZoneLondon ((FITTimeZone)50) +#define FITTimeZoneMadrid ((FITTimeZone)51) +#define FITTimeZoneMunich ((FITTimeZone)52) +#define FITTimeZoneOslo ((FITTimeZone)53) +#define FITTimeZoneParis ((FITTimeZone)54) +#define FITTimeZonePrague ((FITTimeZone)55) +#define FITTimeZoneReykjavik ((FITTimeZone)56) +#define FITTimeZoneRome ((FITTimeZone)57) +#define FITTimeZoneStockholm ((FITTimeZone)58) +#define FITTimeZoneVienna ((FITTimeZone)59) +#define FITTimeZoneWarsaw ((FITTimeZone)60) +#define FITTimeZoneZurich ((FITTimeZone)61) +#define FITTimeZoneQuebec ((FITTimeZone)62) +#define FITTimeZoneOntario ((FITTimeZone)63) +#define FITTimeZoneManitoba ((FITTimeZone)64) +#define FITTimeZoneSaskatchewan ((FITTimeZone)65) +#define FITTimeZoneAlberta ((FITTimeZone)66) +#define FITTimeZoneBritishColumbia ((FITTimeZone)67) +#define FITTimeZoneBoise ((FITTimeZone)68) +#define FITTimeZoneBoston ((FITTimeZone)69) +#define FITTimeZoneChicago ((FITTimeZone)70) +#define FITTimeZoneDallas ((FITTimeZone)71) +#define FITTimeZoneDenver ((FITTimeZone)72) +#define FITTimeZoneKansasCity ((FITTimeZone)73) +#define FITTimeZoneLasVegas ((FITTimeZone)74) +#define FITTimeZoneLosAngeles ((FITTimeZone)75) +#define FITTimeZoneMiami ((FITTimeZone)76) +#define FITTimeZoneMinneapolis ((FITTimeZone)77) +#define FITTimeZoneNewYork ((FITTimeZone)78) +#define FITTimeZoneNewOrleans ((FITTimeZone)79) +#define FITTimeZonePhoenix ((FITTimeZone)80) +#define FITTimeZoneSantaFe ((FITTimeZone)81) +#define FITTimeZoneSeattle ((FITTimeZone)82) +#define FITTimeZoneWashingtonDc ((FITTimeZone)83) +#define FITTimeZoneUsArizona ((FITTimeZone)84) +#define FITTimeZoneChita ((FITTimeZone)85) +#define FITTimeZoneEkaterinburg ((FITTimeZone)86) +#define FITTimeZoneIrkutsk ((FITTimeZone)87) +#define FITTimeZoneKaliningrad ((FITTimeZone)88) +#define FITTimeZoneKrasnoyarsk ((FITTimeZone)89) +#define FITTimeZoneNovosibirsk ((FITTimeZone)90) +#define FITTimeZonePetropavlovskKamchatskiy ((FITTimeZone)91) +#define FITTimeZoneSamara ((FITTimeZone)92) +#define FITTimeZoneVladivostok ((FITTimeZone)93) +#define FITTimeZoneMexicoCentral ((FITTimeZone)94) +#define FITTimeZoneMexicoMountain ((FITTimeZone)95) +#define FITTimeZoneMexicoPacific ((FITTimeZone)96) +#define FITTimeZoneCapeTown ((FITTimeZone)97) +#define FITTimeZoneWinkhoek ((FITTimeZone)98) +#define FITTimeZoneLagos ((FITTimeZone)99) +#define FITTimeZoneRiyahd ((FITTimeZone)100) +#define FITTimeZoneVenezuela ((FITTimeZone)101) +#define FITTimeZoneAustraliaLh ((FITTimeZone)102) +#define FITTimeZoneSantiago ((FITTimeZone)103) +#define FITTimeZoneManual ((FITTimeZone)253) +#define FITTimeZoneAutomatic ((FITTimeZone)254) +#define FITTimeZoneCount 106 + +typedef FITEnum FITDisplayMeasure; +#define FITDisplayMeasureInvalid FITEnumInvalid +#define FITDisplayMeasureMetric ((FITDisplayMeasure)0) +#define FITDisplayMeasureStatute ((FITDisplayMeasure)1) +#define FITDisplayMeasureNautical ((FITDisplayMeasure)2) +#define FITDisplayMeasureCount 3 + +typedef FITEnum FITDisplayHeart; +#define FITDisplayHeartInvalid FITEnumInvalid +#define FITDisplayHeartBpm ((FITDisplayHeart)0) +#define FITDisplayHeartMax ((FITDisplayHeart)1) +#define FITDisplayHeartReserve ((FITDisplayHeart)2) +#define FITDisplayHeartCount 3 + +typedef FITEnum FITDisplayPower; +#define FITDisplayPowerInvalid FITEnumInvalid +#define FITDisplayPowerWatts ((FITDisplayPower)0) +#define FITDisplayPowerPercentFtp ((FITDisplayPower)1) +#define FITDisplayPowerCount 2 + +typedef FITEnum FITDisplayPosition; +#define FITDisplayPositionInvalid FITEnumInvalid +#define FITDisplayPositionDegree ((FITDisplayPosition)0) // dd.dddddd +#define FITDisplayPositionDegreeMinute ((FITDisplayPosition)1) // dddmm.mmm +#define FITDisplayPositionDegreeMinuteSecond ((FITDisplayPosition)2) // dddmmss +#define FITDisplayPositionAustrianGrid ((FITDisplayPosition)3) // Austrian Grid (BMN) +#define FITDisplayPositionBritishGrid ((FITDisplayPosition)4) // British National Grid +#define FITDisplayPositionDutchGrid ((FITDisplayPosition)5) // Dutch grid system +#define FITDisplayPositionHungarianGrid ((FITDisplayPosition)6) // Hungarian grid system +#define FITDisplayPositionFinnishGrid ((FITDisplayPosition)7) // Finnish grid system Zone3 KKJ27 +#define FITDisplayPositionGermanGrid ((FITDisplayPosition)8) // Gausss Krueger (German) +#define FITDisplayPositionIcelandicGrid ((FITDisplayPosition)9) // Icelandic Grid +#define FITDisplayPositionIndonesianEquatorial ((FITDisplayPosition)10) // Indonesian Equatorial LCO +#define FITDisplayPositionIndonesianIrian ((FITDisplayPosition)11) // Indonesian Irian LCO +#define FITDisplayPositionIndonesianSouthern ((FITDisplayPosition)12) // Indonesian Southern LCO +#define FITDisplayPositionIndiaZone0 ((FITDisplayPosition)13) // India zone 0 +#define FITDisplayPositionIndiaZoneIA ((FITDisplayPosition)14) // India zone IA +#define FITDisplayPositionIndiaZoneIB ((FITDisplayPosition)15) // India zone IB +#define FITDisplayPositionIndiaZoneIIA ((FITDisplayPosition)16) // India zone IIA +#define FITDisplayPositionIndiaZoneIIB ((FITDisplayPosition)17) // India zone IIB +#define FITDisplayPositionIndiaZoneIIIA ((FITDisplayPosition)18) // India zone IIIA +#define FITDisplayPositionIndiaZoneIIIB ((FITDisplayPosition)19) // India zone IIIB +#define FITDisplayPositionIndiaZoneIVA ((FITDisplayPosition)20) // India zone IVA +#define FITDisplayPositionIndiaZoneIVB ((FITDisplayPosition)21) // India zone IVB +#define FITDisplayPositionIrishTransverse ((FITDisplayPosition)22) // Irish Transverse Mercator +#define FITDisplayPositionIrishGrid ((FITDisplayPosition)23) // Irish Grid +#define FITDisplayPositionLoran ((FITDisplayPosition)24) // Loran TD +#define FITDisplayPositionMaidenheadGrid ((FITDisplayPosition)25) // Maidenhead grid system +#define FITDisplayPositionMgrsGrid ((FITDisplayPosition)26) // MGRS grid system +#define FITDisplayPositionNewZealandGrid ((FITDisplayPosition)27) // New Zealand grid system +#define FITDisplayPositionNewZealandTransverse ((FITDisplayPosition)28) // New Zealand Transverse Mercator +#define FITDisplayPositionQatarGrid ((FITDisplayPosition)29) // Qatar National Grid +#define FITDisplayPositionModifiedSwedishGrid ((FITDisplayPosition)30) // Modified RT-90 (Sweden) +#define FITDisplayPositionSwedishGrid ((FITDisplayPosition)31) // RT-90 (Sweden) +#define FITDisplayPositionSouthAfricanGrid ((FITDisplayPosition)32) // South African Grid +#define FITDisplayPositionSwissGrid ((FITDisplayPosition)33) // Swiss CH-1903 grid +#define FITDisplayPositionTaiwanGrid ((FITDisplayPosition)34) // Taiwan Grid +#define FITDisplayPositionUnitedStatesGrid ((FITDisplayPosition)35) // United States National Grid +#define FITDisplayPositionUtmUpsGrid ((FITDisplayPosition)36) // UTM/UPS grid system +#define FITDisplayPositionWestMalayan ((FITDisplayPosition)37) // West Malayan RSO +#define FITDisplayPositionBorneoRso ((FITDisplayPosition)38) // Borneo RSO +#define FITDisplayPositionEstonianGrid ((FITDisplayPosition)39) // Estonian grid system +#define FITDisplayPositionLatvianGrid ((FITDisplayPosition)40) // Latvian Transverse Mercator +#define FITDisplayPositionSwedishRef99Grid ((FITDisplayPosition)41) // Reference Grid 99 TM (Swedish) +#define FITDisplayPositionCount 42 + +typedef FITEnum FITSwitch; +#define FITSwitchInvalid FITEnumInvalid +#define FITSwitchOff ((FITSwitch)0) +#define FITSwitchOn ((FITSwitch)1) +#define FITSwitchAuto ((FITSwitch)2) +#define FITSwitchCount 3 + +typedef FITEnum FITSport; +#define FITSportInvalid FITEnumInvalid +#define FITSportGeneric ((FITSport)0) +#define FITSportRunning ((FITSport)1) +#define FITSportCycling ((FITSport)2) +#define FITSportTransition ((FITSport)3) // Mulitsport transition +#define FITSportFitnessEquipment ((FITSport)4) +#define FITSportSwimming ((FITSport)5) +#define FITSportBasketball ((FITSport)6) +#define FITSportSoccer ((FITSport)7) +#define FITSportTennis ((FITSport)8) +#define FITSportAmericanFootball ((FITSport)9) +#define FITSportTraining ((FITSport)10) +#define FITSportWalking ((FITSport)11) +#define FITSportCrossCountrySkiing ((FITSport)12) +#define FITSportAlpineSkiing ((FITSport)13) +#define FITSportSnowboarding ((FITSport)14) +#define FITSportRowing ((FITSport)15) +#define FITSportMountaineering ((FITSport)16) +#define FITSportHiking ((FITSport)17) +#define FITSportMultisport ((FITSport)18) +#define FITSportPaddling ((FITSport)19) +#define FITSportFlying ((FITSport)20) +#define FITSportEBiking ((FITSport)21) +#define FITSportMotorcycling ((FITSport)22) +#define FITSportBoating ((FITSport)23) +#define FITSportDriving ((FITSport)24) +#define FITSportGolf ((FITSport)25) +#define FITSportHangGliding ((FITSport)26) +#define FITSportHorsebackRiding ((FITSport)27) +#define FITSportHunting ((FITSport)28) +#define FITSportFishing ((FITSport)29) +#define FITSportInlineSkating ((FITSport)30) +#define FITSportRockClimbing ((FITSport)31) +#define FITSportSailing ((FITSport)32) +#define FITSportIceSkating ((FITSport)33) +#define FITSportSkyDiving ((FITSport)34) +#define FITSportSnowshoeing ((FITSport)35) +#define FITSportSnowmobiling ((FITSport)36) +#define FITSportStandUpPaddleboarding ((FITSport)37) +#define FITSportSurfing ((FITSport)38) +#define FITSportWakeboarding ((FITSport)39) +#define FITSportWaterSkiing ((FITSport)40) +#define FITSportKayaking ((FITSport)41) +#define FITSportRafting ((FITSport)42) +#define FITSportWindsurfing ((FITSport)43) +#define FITSportKitesurfing ((FITSport)44) +#define FITSportTactical ((FITSport)45) +#define FITSportJumpmaster ((FITSport)46) +#define FITSportBoxing ((FITSport)47) +#define FITSportFloorClimbing ((FITSport)48) +#define FITSportDiving ((FITSport)53) +#define FITSportAll ((FITSport)254) // All is for goals only to include all sports. +#define FITSportCount 51 + +typedef FITUInt8z FITSportBits0; // Bit field corresponding to sport enum type (1 << sport). +#define FITSportBits0Invalid FITUInt8zInvalid +#define FITSportBits0Generic ((FITSportBits0)0x01) +#define FITSportBits0Running ((FITSportBits0)0x02) +#define FITSportBits0Cycling ((FITSportBits0)0x04) +#define FITSportBits0Transition ((FITSportBits0)0x08) // Mulitsport transition +#define FITSportBits0FitnessEquipment ((FITSportBits0)0x10) +#define FITSportBits0Swimming ((FITSportBits0)0x20) +#define FITSportBits0Basketball ((FITSportBits0)0x40) +#define FITSportBits0Soccer ((FITSportBits0)0x80) +#define FITSportBits0Count 8 + +typedef FITUInt8z FITSportBits1; // Bit field corresponding to sport enum type (1 << (sport-8)). +#define FITSportBits1Invalid FITUInt8zInvalid +#define FITSportBits1Tennis ((FITSportBits1)0x01) +#define FITSportBits1AmericanFootball ((FITSportBits1)0x02) +#define FITSportBits1Training ((FITSportBits1)0x04) +#define FITSportBits1Walking ((FITSportBits1)0x08) +#define FITSportBits1CrossCountrySkiing ((FITSportBits1)0x10) +#define FITSportBits1AlpineSkiing ((FITSportBits1)0x20) +#define FITSportBits1Snowboarding ((FITSportBits1)0x40) +#define FITSportBits1Rowing ((FITSportBits1)0x80) +#define FITSportBits1Count 8 + +typedef FITUInt8z FITSportBits2; // Bit field corresponding to sport enum type (1 << (sport-16)). +#define FITSportBits2Invalid FITUInt8zInvalid +#define FITSportBits2Mountaineering ((FITSportBits2)0x01) +#define FITSportBits2Hiking ((FITSportBits2)0x02) +#define FITSportBits2Multisport ((FITSportBits2)0x04) +#define FITSportBits2Paddling ((FITSportBits2)0x08) +#define FITSportBits2Flying ((FITSportBits2)0x10) +#define FITSportBits2EBiking ((FITSportBits2)0x20) +#define FITSportBits2Motorcycling ((FITSportBits2)0x40) +#define FITSportBits2Boating ((FITSportBits2)0x80) +#define FITSportBits2Count 8 + +typedef FITUInt8z FITSportBits3; // Bit field corresponding to sport enum type (1 << (sport-24)). +#define FITSportBits3Invalid FITUInt8zInvalid +#define FITSportBits3Driving ((FITSportBits3)0x01) +#define FITSportBits3Golf ((FITSportBits3)0x02) +#define FITSportBits3HangGliding ((FITSportBits3)0x04) +#define FITSportBits3HorsebackRiding ((FITSportBits3)0x08) +#define FITSportBits3Hunting ((FITSportBits3)0x10) +#define FITSportBits3Fishing ((FITSportBits3)0x20) +#define FITSportBits3InlineSkating ((FITSportBits3)0x40) +#define FITSportBits3RockClimbing ((FITSportBits3)0x80) +#define FITSportBits3Count 8 + +typedef FITUInt8z FITSportBits4; // Bit field corresponding to sport enum type (1 << (sport-32)). +#define FITSportBits4Invalid FITUInt8zInvalid +#define FITSportBits4Sailing ((FITSportBits4)0x01) +#define FITSportBits4IceSkating ((FITSportBits4)0x02) +#define FITSportBits4SkyDiving ((FITSportBits4)0x04) +#define FITSportBits4Snowshoeing ((FITSportBits4)0x08) +#define FITSportBits4Snowmobiling ((FITSportBits4)0x10) +#define FITSportBits4StandUpPaddleboarding ((FITSportBits4)0x20) +#define FITSportBits4Surfing ((FITSportBits4)0x40) +#define FITSportBits4Wakeboarding ((FITSportBits4)0x80) +#define FITSportBits4Count 8 + +typedef FITUInt8z FITSportBits5; // Bit field corresponding to sport enum type (1 << (sport-40)). +#define FITSportBits5Invalid FITUInt8zInvalid +#define FITSportBits5WaterSkiing ((FITSportBits5)0x01) +#define FITSportBits5Kayaking ((FITSportBits5)0x02) +#define FITSportBits5Rafting ((FITSportBits5)0x04) +#define FITSportBits5Windsurfing ((FITSportBits5)0x08) +#define FITSportBits5Kitesurfing ((FITSportBits5)0x10) +#define FITSportBits5Tactical ((FITSportBits5)0x20) +#define FITSportBits5Jumpmaster ((FITSportBits5)0x40) +#define FITSportBits5Boxing ((FITSportBits5)0x80) +#define FITSportBits5Count 8 + +typedef FITUInt8z FITSportBits6; // Bit field corresponding to sport enum type (1 << (sport-48)). +#define FITSportBits6Invalid FITUInt8zInvalid +#define FITSportBits6FloorClimbing ((FITSportBits6)0x01) +#define FITSportBits6Count 1 + +typedef FITEnum FITSubSport; +#define FITSubSportInvalid FITEnumInvalid +#define FITSubSportGeneric ((FITSubSport)0) +#define FITSubSportTreadmill ((FITSubSport)1) // Run/Fitness Equipment +#define FITSubSportStreet ((FITSubSport)2) // Run +#define FITSubSportTrail ((FITSubSport)3) // Run +#define FITSubSportTrack ((FITSubSport)4) // Run +#define FITSubSportSpin ((FITSubSport)5) // Cycling +#define FITSubSportIndoorCycling ((FITSubSport)6) // Cycling/Fitness Equipment +#define FITSubSportRoad ((FITSubSport)7) // Cycling +#define FITSubSportMountain ((FITSubSport)8) // Cycling +#define FITSubSportDownhill ((FITSubSport)9) // Cycling +#define FITSubSportRecumbent ((FITSubSport)10) // Cycling +#define FITSubSportCyclocross ((FITSubSport)11) // Cycling +#define FITSubSportHandCycling ((FITSubSport)12) // Cycling +#define FITSubSportTrackCycling ((FITSubSport)13) // Cycling +#define FITSubSportIndoorRowing ((FITSubSport)14) // Fitness Equipment +#define FITSubSportElliptical ((FITSubSport)15) // Fitness Equipment +#define FITSubSportStairClimbing ((FITSubSport)16) // Fitness Equipment +#define FITSubSportLapSwimming ((FITSubSport)17) // Swimming +#define FITSubSportOpenWater ((FITSubSport)18) // Swimming +#define FITSubSportFlexibilityTraining ((FITSubSport)19) // Training +#define FITSubSportStrengthTraining ((FITSubSport)20) // Training +#define FITSubSportWarmUp ((FITSubSport)21) // Tennis +#define FITSubSportMatch ((FITSubSport)22) // Tennis +#define FITSubSportExercise ((FITSubSport)23) // Tennis +#define FITSubSportChallenge ((FITSubSport)24) +#define FITSubSportIndoorSkiing ((FITSubSport)25) // Fitness Equipment +#define FITSubSportCardioTraining ((FITSubSport)26) // Training +#define FITSubSportIndoorWalking ((FITSubSport)27) // Walking/Fitness Equipment +#define FITSubSportEBikeFitness ((FITSubSport)28) // E-Biking +#define FITSubSportBmx ((FITSubSport)29) // Cycling +#define FITSubSportCasualWalking ((FITSubSport)30) // Walking +#define FITSubSportSpeedWalking ((FITSubSport)31) // Walking +#define FITSubSportBikeToRunTransition ((FITSubSport)32) // Transition +#define FITSubSportRunToBikeTransition ((FITSubSport)33) // Transition +#define FITSubSportSwimToBikeTransition ((FITSubSport)34) // Transition +#define FITSubSportAtv ((FITSubSport)35) // Motorcycling +#define FITSubSportMotocross ((FITSubSport)36) // Motorcycling +#define FITSubSportBackcountry ((FITSubSport)37) // Alpine Skiing/Snowboarding +#define FITSubSportResort ((FITSubSport)38) // Alpine Skiing/Snowboarding +#define FITSubSportRcDrone ((FITSubSport)39) // Flying +#define FITSubSportWingsuit ((FITSubSport)40) // Flying +#define FITSubSportWhitewater ((FITSubSport)41) // Kayaking/Rafting +#define FITSubSportSkateSkiing ((FITSubSport)42) // Cross Country Skiing +#define FITSubSportYoga ((FITSubSport)43) // Training +#define FITSubSportPilates ((FITSubSport)44) // Fitness Equipment +#define FITSubSportIndoorRunning ((FITSubSport)45) // Run +#define FITSubSportGravelCycling ((FITSubSport)46) // Cycling +#define FITSubSportEBikeMountain ((FITSubSport)47) // Cycling +#define FITSubSportCommuting ((FITSubSport)48) // Cycling +#define FITSubSportMixedSurface ((FITSubSport)49) // Cycling +#define FITSubSportNavigate ((FITSubSport)50) +#define FITSubSportTrackMe ((FITSubSport)51) +#define FITSubSportMap ((FITSubSport)52) +#define FITSubSportSingleGasDiving ((FITSubSport)53) // Diving +#define FITSubSportMultiGasDiving ((FITSubSport)54) // Diving +#define FITSubSportGaugeDiving ((FITSubSport)55) // Diving +#define FITSubSportApneaDiving ((FITSubSport)56) // Diving +#define FITSubSportApneaHunting ((FITSubSport)57) // Diving +#define FITSubSportVirtualActivity ((FITSubSport)58) +#define FITSubSportObstacle ((FITSubSport)59) // Used for events where participants run, crawl through mud, climb over walls, etc. +#define FITSubSportBreathing ((FITSubSport)62) +#define FITSubSportSailRace ((FITSubSport)65) // Sailing +#define FITSubSportUltra ((FITSubSport)67) // Ultramarathon +#define FITSubSportIndoorClimbing ((FITSubSport)68) // Climbing +#define FITSubSportBouldering ((FITSubSport)69) // Climbing +#define FITSubSportAll ((FITSubSport)254) +#define FITSubSportCount 66 + +typedef FITEnum FITSportEvent; +#define FITSportEventInvalid FITEnumInvalid +#define FITSportEventUncategorized ((FITSportEvent)0) +#define FITSportEventGeocaching ((FITSportEvent)1) +#define FITSportEventFitness ((FITSportEvent)2) +#define FITSportEventRecreation ((FITSportEvent)3) +#define FITSportEventRace ((FITSportEvent)4) +#define FITSportEventSpecialEvent ((FITSportEvent)5) +#define FITSportEventTraining ((FITSportEvent)6) +#define FITSportEventTransportation ((FITSportEvent)7) +#define FITSportEventTouring ((FITSportEvent)8) +#define FITSportEventCount 9 + +typedef FITEnum FITActivity; +#define FITActivityInvalid FITEnumInvalid +#define FITActivityManual ((FITActivity)0) +#define FITActivityAutoMultiSport ((FITActivity)1) +#define FITActivityCount 2 + +typedef FITEnum FITIntensity; +#define FITIntensityInvalid FITEnumInvalid +#define FITIntensityActive ((FITIntensity)0) +#define FITIntensityRest ((FITIntensity)1) +#define FITIntensityWarmup ((FITIntensity)2) +#define FITIntensityCooldown ((FITIntensity)3) +#define FITIntensityRecovery ((FITIntensity)4) +#define FITIntensityInterval ((FITIntensity)5) +#define FITIntensityOther ((FITIntensity)6) +#define FITIntensityCount 7 + +typedef FITEnum FITSessionTrigger; +#define FITSessionTriggerInvalid FITEnumInvalid +#define FITSessionTriggerActivityEnd ((FITSessionTrigger)0) +#define FITSessionTriggerManual ((FITSessionTrigger)1) // User changed sport. +#define FITSessionTriggerAutoMultiSport ((FITSessionTrigger)2) // Auto multi-sport feature is enabled and user pressed lap button to advance session. +#define FITSessionTriggerFitnessEquipment ((FITSessionTrigger)3) // Auto sport change caused by user linking to fitness equipment. +#define FITSessionTriggerCount 4 + +typedef FITEnum FITAutolapTrigger; +#define FITAutolapTriggerInvalid FITEnumInvalid +#define FITAutolapTriggerTime ((FITAutolapTrigger)0) +#define FITAutolapTriggerDistance ((FITAutolapTrigger)1) +#define FITAutolapTriggerPositionStart ((FITAutolapTrigger)2) +#define FITAutolapTriggerPositionLap ((FITAutolapTrigger)3) +#define FITAutolapTriggerPositionWaypoint ((FITAutolapTrigger)4) +#define FITAutolapTriggerPositionMarked ((FITAutolapTrigger)5) +#define FITAutolapTriggerOff ((FITAutolapTrigger)6) +#define FITAutolapTriggerCount 7 + +typedef FITEnum FITLapTrigger; +#define FITLapTriggerInvalid FITEnumInvalid +#define FITLapTriggerManual ((FITLapTrigger)0) +#define FITLapTriggerTime ((FITLapTrigger)1) +#define FITLapTriggerDistance ((FITLapTrigger)2) +#define FITLapTriggerPositionStart ((FITLapTrigger)3) +#define FITLapTriggerPositionLap ((FITLapTrigger)4) +#define FITLapTriggerPositionWaypoint ((FITLapTrigger)5) +#define FITLapTriggerPositionMarked ((FITLapTrigger)6) +#define FITLapTriggerSessionEnd ((FITLapTrigger)7) +#define FITLapTriggerFitnessEquipment ((FITLapTrigger)8) +#define FITLapTriggerCount 9 + +typedef FITEnum FITTimeMode; +#define FITTimeModeInvalid FITEnumInvalid +#define FITTimeModeHour12 ((FITTimeMode)0) +#define FITTimeModeHour24 ((FITTimeMode)1) // Does not use a leading zero and has a colon +#define FITTimeModeMilitary ((FITTimeMode)2) // Uses a leading zero and does not have a colon +#define FITTimeModeHour12WithSeconds ((FITTimeMode)3) +#define FITTimeModeHour24WithSeconds ((FITTimeMode)4) +#define FITTimeModeUtc ((FITTimeMode)5) +#define FITTimeModeCount 6 + +typedef FITEnum FITBacklightMode; +#define FITBacklightModeInvalid FITEnumInvalid +#define FITBacklightModeOff ((FITBacklightMode)0) +#define FITBacklightModeManual ((FITBacklightMode)1) +#define FITBacklightModeKeyAndMessages ((FITBacklightMode)2) +#define FITBacklightModeAutoBrightness ((FITBacklightMode)3) +#define FITBacklightModeSmartNotifications ((FITBacklightMode)4) +#define FITBacklightModeKeyAndMessagesNight ((FITBacklightMode)5) +#define FITBacklightModeKeyAndMessagesAndSmartNotifications ((FITBacklightMode)6) +#define FITBacklightModeCount 7 + +typedef FITEnum FITDateMode; +#define FITDateModeInvalid FITEnumInvalid +#define FITDateModeDayMonth ((FITDateMode)0) +#define FITDateModeMonthDay ((FITDateMode)1) +#define FITDateModeCount 2 + +typedef FITUInt8 FITBacklightTimeout; // Timeout in seconds. +#define FITBacklightTimeoutInvalid FITUInt8Invalid +#define FITBacklightTimeoutInfinite ((FITBacklightTimeout)0) // Backlight stays on forever. +#define FITBacklightTimeoutCount 1 + +typedef FITEnum FITEvent; +#define FITEventInvalid FITEnumInvalid +#define FITEventTimer ((FITEvent)0) // Group 0. Start / stop_all +#define FITEventWorkout ((FITEvent)3) // start / stop +#define FITEventWorkoutStep ((FITEvent)4) // Start at beginning of workout. Stop at end of each step. +#define FITEventPowerDown ((FITEvent)5) // stop_all group 0 +#define FITEventPowerUp ((FITEvent)6) // stop_all group 0 +#define FITEventOffCourse ((FITEvent)7) // start / stop group 0 +#define FITEventSession ((FITEvent)8) // Stop at end of each session. +#define FITEventLap ((FITEvent)9) // Stop at end of each lap. +#define FITEventCoursePoint ((FITEvent)10) // marker +#define FITEventBattery ((FITEvent)11) // marker +#define FITEventVirtualPartnerPace ((FITEvent)12) // Group 1. Start at beginning of activity if VP enabled, when VP pace is changed during activity or VP enabled mid activity. stop_disable when VP disabled. +#define FITEventHrHighAlert ((FITEvent)13) // Group 0. Start / stop when in alert condition. +#define FITEventHrLowAlert ((FITEvent)14) // Group 0. Start / stop when in alert condition. +#define FITEventSpeedHighAlert ((FITEvent)15) // Group 0. Start / stop when in alert condition. +#define FITEventSpeedLowAlert ((FITEvent)16) // Group 0. Start / stop when in alert condition. +#define FITEventCadHighAlert ((FITEvent)17) // Group 0. Start / stop when in alert condition. +#define FITEventCadLowAlert ((FITEvent)18) // Group 0. Start / stop when in alert condition. +#define FITEventPowerHighAlert ((FITEvent)19) // Group 0. Start / stop when in alert condition. +#define FITEventPowerLowAlert ((FITEvent)20) // Group 0. Start / stop when in alert condition. +#define FITEventRecoveryHr ((FITEvent)21) // marker +#define FITEventBatteryLow ((FITEvent)22) // marker +#define FITEventTimeDurationAlert ((FITEvent)23) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FITEventDistanceDurationAlert ((FITEvent)24) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FITEventCalorieDurationAlert ((FITEvent)25) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FITEventActivity ((FITEvent)26) // Group 1.. Stop at end of activity. +#define FITEventFitnessEquipment ((FITEvent)27) // marker +#define FITEventLength ((FITEvent)28) // Stop at end of each length. +#define FITEventUserMarker ((FITEvent)32) // marker +#define FITEventSportPoint ((FITEvent)33) // marker +#define FITEventCalibration ((FITEvent)36) // start/stop/marker +#define FITEventFrontGearChange ((FITEvent)42) // marker +#define FITEventRearGearChange ((FITEvent)43) // marker +#define FITEventRiderPositionChange ((FITEvent)44) // marker +#define FITEventElevHighAlert ((FITEvent)45) // Group 0. Start / stop when in alert condition. +#define FITEventElevLowAlert ((FITEvent)46) // Group 0. Start / stop when in alert condition. +#define FITEventCommTimeout ((FITEvent)47) // marker +#define FITEventRadarThreatAlert ((FITEvent)75) // start/stop/marker +#define FITEventCount 37 + +typedef FITEnum FITEventType; +#define FITEventTypeInvalid FITEnumInvalid +#define FITEventTypeStart ((FITEventType)0) +#define FITEventTypeStop ((FITEventType)1) +#define FITEventTypeConsecutiveDepreciated ((FITEventType)2) +#define FITEventTypeMarker ((FITEventType)3) +#define FITEventTypeStopAll ((FITEventType)4) +#define FITEventTypeBeginDepreciated ((FITEventType)5) +#define FITEventTypeEndDepreciated ((FITEventType)6) +#define FITEventTypeEndAllDepreciated ((FITEventType)7) +#define FITEventTypeStopDisable ((FITEventType)8) +#define FITEventTypeStopDisableAll ((FITEventType)9) +#define FITEventTypeCount 10 + +typedef FITEnum FITTimerTrigger; // timer event data +#define FITTimerTriggerInvalid FITEnumInvalid +#define FITTimerTriggerManual ((FITTimerTrigger)0) +#define FITTimerTriggerAuto ((FITTimerTrigger)1) +#define FITTimerTriggerFitnessEquipment ((FITTimerTrigger)2) +#define FITTimerTriggerCount 3 + +typedef FITEnum FITFitnessEquipmentState; // fitness equipment event data +#define FITFitnessEquipmentStateInvalid FITEnumInvalid +#define FITFitnessEquipmentStateReady ((FITFitnessEquipmentState)0) +#define FITFitnessEquipmentStateInUse ((FITFitnessEquipmentState)1) +#define FITFitnessEquipmentStatePaused ((FITFitnessEquipmentState)2) +#define FITFitnessEquipmentStateUnknown ((FITFitnessEquipmentState)3) // lost connection to fitness equipment +#define FITFitnessEquipmentStateCount 4 + +typedef FITEnum FITTone; +#define FITToneInvalid FITEnumInvalid +#define FITToneOff ((FITTone)0) +#define FITToneTone ((FITTone)1) +#define FITToneVibrate ((FITTone)2) +#define FITToneToneAndVibrate ((FITTone)3) +#define FITToneCount 4 + +typedef FITEnum FITAutoscroll; +#define FITAutoscrollInvalid FITEnumInvalid +#define FITAutoscrollNone ((FITAutoscroll)0) +#define FITAutoscrollSlow ((FITAutoscroll)1) +#define FITAutoscrollMedium ((FITAutoscroll)2) +#define FITAutoscrollFast ((FITAutoscroll)3) +#define FITAutoscrollCount 4 + +typedef FITEnum FITActivityClass; +#define FITActivityClassInvalid FITEnumInvalid +#define FITActivityClassLevel ((FITActivityClass)0x7F) // 0 to 100 +#define FITActivityClassLevelMax ((FITActivityClass)100) +#define FITActivityClassAthlete ((FITActivityClass)0x80) +#define FITActivityClassCount 3 + +typedef FITEnum FITHrZoneCalc; +#define FITHrZoneCalcInvalid FITEnumInvalid +#define FITHrZoneCalcCustom ((FITHrZoneCalc)0) +#define FITHrZoneCalcPercentMaxHr ((FITHrZoneCalc)1) +#define FITHrZoneCalcPercentHrr ((FITHrZoneCalc)2) +#define FITHrZoneCalcCount 3 + +typedef FITEnum FITPwrZoneCalc; +#define FITPwrZoneCalcInvalid FITEnumInvalid +#define FITPwrZoneCalcCustom ((FITPwrZoneCalc)0) +#define FITPwrZoneCalcPercentFtp ((FITPwrZoneCalc)1) +#define FITPwrZoneCalcCount 2 + +typedef FITEnum FITWktStepDuration; +#define FITWktStepDurationInvalid FITEnumInvalid +#define FITWktStepDurationTime ((FITWktStepDuration)0) +#define FITWktStepDurationDistance ((FITWktStepDuration)1) +#define FITWktStepDurationHrLessThan ((FITWktStepDuration)2) +#define FITWktStepDurationHrGreaterThan ((FITWktStepDuration)3) +#define FITWktStepDurationCalories ((FITWktStepDuration)4) +#define FITWktStepDurationOpen ((FITWktStepDuration)5) +#define FITWktStepDurationRepeatUntilStepsCmplt ((FITWktStepDuration)6) +#define FITWktStepDurationRepeatUntilTime ((FITWktStepDuration)7) +#define FITWktStepDurationRepeatUntilDistance ((FITWktStepDuration)8) +#define FITWktStepDurationRepeatUntilCalories ((FITWktStepDuration)9) +#define FITWktStepDurationRepeatUntilHrLessThan ((FITWktStepDuration)10) +#define FITWktStepDurationRepeatUntilHrGreaterThan ((FITWktStepDuration)11) +#define FITWktStepDurationRepeatUntilPowerLessThan ((FITWktStepDuration)12) +#define FITWktStepDurationRepeatUntilPowerGreaterThan ((FITWktStepDuration)13) +#define FITWktStepDurationPowerLessThan ((FITWktStepDuration)14) +#define FITWktStepDurationPowerGreaterThan ((FITWktStepDuration)15) +#define FITWktStepDurationTrainingPeaksTss ((FITWktStepDuration)16) +#define FITWktStepDurationRepeatUntilPowerLastLapLessThan ((FITWktStepDuration)17) +#define FITWktStepDurationRepeatUntilMaxPowerLastLapLessThan ((FITWktStepDuration)18) +#define FITWktStepDurationPower3sLessThan ((FITWktStepDuration)19) +#define FITWktStepDurationPower10sLessThan ((FITWktStepDuration)20) +#define FITWktStepDurationPower30sLessThan ((FITWktStepDuration)21) +#define FITWktStepDurationPower3sGreaterThan ((FITWktStepDuration)22) +#define FITWktStepDurationPower10sGreaterThan ((FITWktStepDuration)23) +#define FITWktStepDurationPower30sGreaterThan ((FITWktStepDuration)24) +#define FITWktStepDurationPowerLapLessThan ((FITWktStepDuration)25) +#define FITWktStepDurationPowerLapGreaterThan ((FITWktStepDuration)26) +#define FITWktStepDurationRepeatUntilTrainingPeaksTss ((FITWktStepDuration)27) +#define FITWktStepDurationRepetitionTime ((FITWktStepDuration)28) +#define FITWktStepDurationReps ((FITWktStepDuration)29) +#define FITWktStepDurationTimeOnly ((FITWktStepDuration)31) +#define FITWktStepDurationCount 31 + +typedef FITEnum FITWktStepTarget; +#define FITWktStepTargetInvalid FITEnumInvalid +#define FITWktStepTargetSpeed ((FITWktStepTarget)0) +#define FITWktStepTargetHeartRate ((FITWktStepTarget)1) +#define FITWktStepTargetOpen ((FITWktStepTarget)2) +#define FITWktStepTargetCadence ((FITWktStepTarget)3) +#define FITWktStepTargetPower ((FITWktStepTarget)4) +#define FITWktStepTargetGrade ((FITWktStepTarget)5) +#define FITWktStepTargetResistance ((FITWktStepTarget)6) +#define FITWktStepTargetPower3s ((FITWktStepTarget)7) +#define FITWktStepTargetPower10s ((FITWktStepTarget)8) +#define FITWktStepTargetPower30s ((FITWktStepTarget)9) +#define FITWktStepTargetPowerLap ((FITWktStepTarget)10) +#define FITWktStepTargetSwimStroke ((FITWktStepTarget)11) +#define FITWktStepTargetSpeedLap ((FITWktStepTarget)12) +#define FITWktStepTargetHeartRateLap ((FITWktStepTarget)13) +#define FITWktStepTargetCount 14 + +typedef FITEnum FITGoal; +#define FITGoalInvalid FITEnumInvalid +#define FITGoalTime ((FITGoal)0) +#define FITGoalDistance ((FITGoal)1) +#define FITGoalCalories ((FITGoal)2) +#define FITGoalFrequency ((FITGoal)3) +#define FITGoalSteps ((FITGoal)4) +#define FITGoalAscent ((FITGoal)5) +#define FITGoalActiveMinutes ((FITGoal)6) +#define FITGoalCount 7 + +typedef FITEnum FITGoalRecurrence; +#define FITGoalRecurrenceInvalid FITEnumInvalid +#define FITGoalRecurrenceOff ((FITGoalRecurrence)0) +#define FITGoalRecurrenceDaily ((FITGoalRecurrence)1) +#define FITGoalRecurrenceWeekly ((FITGoalRecurrence)2) +#define FITGoalRecurrenceMonthly ((FITGoalRecurrence)3) +#define FITGoalRecurrenceYearly ((FITGoalRecurrence)4) +#define FITGoalRecurrenceCustom ((FITGoalRecurrence)5) +#define FITGoalRecurrenceCount 6 + +typedef FITEnum FITGoalSource; +#define FITGoalSourceInvalid FITEnumInvalid +#define FITGoalSourceAuto ((FITGoalSource)0) // Device generated +#define FITGoalSourceCommunity ((FITGoalSource)1) // Social network sourced goal +#define FITGoalSourceUser ((FITGoalSource)2) // Manually generated +#define FITGoalSourceCount 3 + +typedef FITEnum FITSchedule; +#define FITScheduleInvalid FITEnumInvalid +#define FITScheduleWorkout ((FITSchedule)0) +#define FITScheduleCourse ((FITSchedule)1) +#define FITScheduleCount 2 + +typedef FITEnum FITCoursePoint; +#define FITCoursePointInvalid FITEnumInvalid +#define FITCoursePointGeneric ((FITCoursePoint)0) +#define FITCoursePointSummit ((FITCoursePoint)1) +#define FITCoursePointValley ((FITCoursePoint)2) +#define FITCoursePointWater ((FITCoursePoint)3) +#define FITCoursePointFood ((FITCoursePoint)4) +#define FITCoursePointDanger ((FITCoursePoint)5) +#define FITCoursePointLeft ((FITCoursePoint)6) +#define FITCoursePointRight ((FITCoursePoint)7) +#define FITCoursePointStraight ((FITCoursePoint)8) +#define FITCoursePointFirstAid ((FITCoursePoint)9) +#define FITCoursePointFourthCategory ((FITCoursePoint)10) +#define FITCoursePointThirdCategory ((FITCoursePoint)11) +#define FITCoursePointSecondCategory ((FITCoursePoint)12) +#define FITCoursePointFirstCategory ((FITCoursePoint)13) +#define FITCoursePointHorsCategory ((FITCoursePoint)14) +#define FITCoursePointSprint ((FITCoursePoint)15) +#define FITCoursePointLeftFork ((FITCoursePoint)16) +#define FITCoursePointRightFork ((FITCoursePoint)17) +#define FITCoursePointMiddleFork ((FITCoursePoint)18) +#define FITCoursePointSlightLeft ((FITCoursePoint)19) +#define FITCoursePointSharpLeft ((FITCoursePoint)20) +#define FITCoursePointSlightRight ((FITCoursePoint)21) +#define FITCoursePointSharpRight ((FITCoursePoint)22) +#define FITCoursePointUTurn ((FITCoursePoint)23) +#define FITCoursePointSegmentStart ((FITCoursePoint)24) +#define FITCoursePointSegmentEnd ((FITCoursePoint)25) +#define FITCoursePointCampsite ((FITCoursePoint)27) +#define FITCoursePointAidStation ((FITCoursePoint)28) +#define FITCoursePointRestArea ((FITCoursePoint)29) +#define FITCoursePointGeneralDistance ((FITCoursePoint)30) // Used with UpAhead +#define FITCoursePointService ((FITCoursePoint)31) +#define FITCoursePointEnergyGel ((FITCoursePoint)32) +#define FITCoursePointSportsDrink ((FITCoursePoint)33) +#define FITCoursePointMileMarker ((FITCoursePoint)34) +#define FITCoursePointCheckpoint ((FITCoursePoint)35) +#define FITCoursePointShelter ((FITCoursePoint)36) +#define FITCoursePointMeetingSpot ((FITCoursePoint)37) +#define FITCoursePointOverlook ((FITCoursePoint)38) +#define FITCoursePointToilet ((FITCoursePoint)39) +#define FITCoursePointShower ((FITCoursePoint)40) +#define FITCoursePointGear ((FITCoursePoint)41) +#define FITCoursePointSharpCurve ((FITCoursePoint)42) +#define FITCoursePointSteepIncline ((FITCoursePoint)43) +#define FITCoursePointTunnel ((FITCoursePoint)44) +#define FITCoursePointBridge ((FITCoursePoint)45) +#define FITCoursePointObstacle ((FITCoursePoint)46) +#define FITCoursePointCrossing ((FITCoursePoint)47) +#define FITCoursePointStore ((FITCoursePoint)48) +#define FITCoursePointTransition ((FITCoursePoint)49) +#define FITCoursePointNavaid ((FITCoursePoint)50) +#define FITCoursePointTransport ((FITCoursePoint)51) +#define FITCoursePointAlert ((FITCoursePoint)52) +#define FITCoursePointInfo ((FITCoursePoint)53) +#define FITCoursePointCount 53 + +typedef FITUInt16 FITManufacturer; +#define FITManufacturerInvalid FITUInt16Invalid +#define FITManufacturerGarmin ((FITManufacturer)1) +#define FITManufacturerGarminFr405Antfs ((FITManufacturer)2) // Do not use. Used by FR405 for ANTFS man id. +#define FITManufacturerZephyr ((FITManufacturer)3) +#define FITManufacturerDayton ((FITManufacturer)4) +#define FITManufacturerIdt ((FITManufacturer)5) +#define FITManufacturerSrm ((FITManufacturer)6) +#define FITManufacturerQuarq ((FITManufacturer)7) +#define FITManufacturerIbike ((FITManufacturer)8) +#define FITManufacturerSaris ((FITManufacturer)9) +#define FITManufacturerSparkHk ((FITManufacturer)10) +#define FITManufacturerTanita ((FITManufacturer)11) +#define FITManufacturerEchowell ((FITManufacturer)12) +#define FITManufacturerDynastreamOem ((FITManufacturer)13) +#define FITManufacturerNautilus ((FITManufacturer)14) +#define FITManufacturerDynastream ((FITManufacturer)15) +#define FITManufacturerTimex ((FITManufacturer)16) +#define FITManufacturerMetrigear ((FITManufacturer)17) +#define FITManufacturerXelic ((FITManufacturer)18) +#define FITManufacturerBeurer ((FITManufacturer)19) +#define FITManufacturerCardiosport ((FITManufacturer)20) +#define FITManufacturerAAndD ((FITManufacturer)21) +#define FITManufacturerHmm ((FITManufacturer)22) +#define FITManufacturerSuunto ((FITManufacturer)23) +#define FITManufacturerThitaElektronik ((FITManufacturer)24) +#define FITManufacturerGpulse ((FITManufacturer)25) +#define FITManufacturerCleanMobile ((FITManufacturer)26) +#define FITManufacturerPedalBrain ((FITManufacturer)27) +#define FITManufacturerPeaksware ((FITManufacturer)28) +#define FITManufacturerSaxonar ((FITManufacturer)29) +#define FITManufacturerLemondFitness ((FITManufacturer)30) +#define FITManufacturerDexcom ((FITManufacturer)31) +#define FITManufacturerWahooFitness ((FITManufacturer)32) +#define FITManufacturerOctaneFitness ((FITManufacturer)33) +#define FITManufacturerArchinoetics ((FITManufacturer)34) +#define FITManufacturerTheHurtBox ((FITManufacturer)35) +#define FITManufacturerCitizenSystems ((FITManufacturer)36) +#define FITManufacturerMagellan ((FITManufacturer)37) +#define FITManufacturerOsynce ((FITManufacturer)38) +#define FITManufacturerHolux ((FITManufacturer)39) +#define FITManufacturerConcept2 ((FITManufacturer)40) +#define FITManufacturerShimano ((FITManufacturer)41) +#define FITManufacturerOneGiantLeap ((FITManufacturer)42) +#define FITManufacturerAceSensor ((FITManufacturer)43) +#define FITManufacturerBrimBrothers ((FITManufacturer)44) +#define FITManufacturerXplova ((FITManufacturer)45) +#define FITManufacturerPerceptionDigital ((FITManufacturer)46) +#define FITManufacturerBf1systems ((FITManufacturer)47) +#define FITManufacturerPioneer ((FITManufacturer)48) +#define FITManufacturerSpantec ((FITManufacturer)49) +#define FITManufacturerMetalogics ((FITManufacturer)50) +#define FITManufacturer4iiiis ((FITManufacturer)51) +#define FITManufacturerSeikoEpson ((FITManufacturer)52) +#define FITManufacturerSeikoEpsonOem ((FITManufacturer)53) +#define FITManufacturerIforPowell ((FITManufacturer)54) +#define FITManufacturerMaxwellGuider ((FITManufacturer)55) +#define FITManufacturerStarTrac ((FITManufacturer)56) +#define FITManufacturerBreakaway ((FITManufacturer)57) +#define FITManufacturerAlatechTechnologyLtd ((FITManufacturer)58) +#define FITManufacturerMioTechnologyEurope ((FITManufacturer)59) +#define FITManufacturerRotor ((FITManufacturer)60) +#define FITManufacturerGeonaute ((FITManufacturer)61) +#define FITManufacturerIdBike ((FITManufacturer)62) +#define FITManufacturerSpecialized ((FITManufacturer)63) +#define FITManufacturerWtek ((FITManufacturer)64) +#define FITManufacturerPhysicalEnterprises ((FITManufacturer)65) +#define FITManufacturerNorthPoleEngineering ((FITManufacturer)66) +#define FITManufacturerBkool ((FITManufacturer)67) +#define FITManufacturerCateye ((FITManufacturer)68) +#define FITManufacturerStagesCycling ((FITManufacturer)69) +#define FITManufacturerSigmasport ((FITManufacturer)70) +#define FITManufacturerTomtom ((FITManufacturer)71) +#define FITManufacturerPeripedal ((FITManufacturer)72) +#define FITManufacturerWattbike ((FITManufacturer)73) +#define FITManufacturerMoxy ((FITManufacturer)76) +#define FITManufacturerCiclosport ((FITManufacturer)77) +#define FITManufacturerPowerbahn ((FITManufacturer)78) +#define FITManufacturerAcornProjectsAps ((FITManufacturer)79) +#define FITManufacturerLifebeam ((FITManufacturer)80) +#define FITManufacturerBontrager ((FITManufacturer)81) +#define FITManufacturerWellgo ((FITManufacturer)82) +#define FITManufacturerScosche ((FITManufacturer)83) +#define FITManufacturerMagura ((FITManufacturer)84) +#define FITManufacturerWoodway ((FITManufacturer)85) +#define FITManufacturerElite ((FITManufacturer)86) +#define FITManufacturerNielsenKellerman ((FITManufacturer)87) +#define FITManufacturerDkCity ((FITManufacturer)88) +#define FITManufacturerTacx ((FITManufacturer)89) +#define FITManufacturerDirectionTechnology ((FITManufacturer)90) +#define FITManufacturerMagtonic ((FITManufacturer)91) +#define FITManufacturer1partcarbon ((FITManufacturer)92) +#define FITManufacturerInsideRideTechnologies ((FITManufacturer)93) +#define FITManufacturerSoundOfMotion ((FITManufacturer)94) +#define FITManufacturerStryd ((FITManufacturer)95) +#define FITManufacturerIcg ((FITManufacturer)96) // Indoorcycling Group +#define FITManufacturerMiPulse ((FITManufacturer)97) +#define FITManufacturerBsxAthletics ((FITManufacturer)98) +#define FITManufacturerLook ((FITManufacturer)99) +#define FITManufacturerCampagnoloSrl ((FITManufacturer)100) +#define FITManufacturerBodyBikeSmart ((FITManufacturer)101) +#define FITManufacturerPraxisworks ((FITManufacturer)102) +#define FITManufacturerLimitsTechnology ((FITManufacturer)103) // Limits Technology Ltd. +#define FITManufacturerTopactionTechnology ((FITManufacturer)104) // TopAction Technology Inc. +#define FITManufacturerCosinuss ((FITManufacturer)105) +#define FITManufacturerFitcare ((FITManufacturer)106) +#define FITManufacturerMagene ((FITManufacturer)107) +#define FITManufacturerGiantManufacturingCo ((FITManufacturer)108) +#define FITManufacturerTigrasport ((FITManufacturer)109) // Tigrasport +#define FITManufacturerSalutron ((FITManufacturer)110) +#define FITManufacturerTechnogym ((FITManufacturer)111) +#define FITManufacturerBrytonSensors ((FITManufacturer)112) +#define FITManufacturerLatitudeLimited ((FITManufacturer)113) +#define FITManufacturerSoaringTechnology ((FITManufacturer)114) +#define FITManufacturerIgpsport ((FITManufacturer)115) +#define FITManufacturerThinkrider ((FITManufacturer)116) +#define FITManufacturerGopherSport ((FITManufacturer)117) +#define FITManufacturerWaterrower ((FITManufacturer)118) +#define FITManufacturerOrangetheory ((FITManufacturer)119) +#define FITManufacturerInpeak ((FITManufacturer)120) +#define FITManufacturerKinetic ((FITManufacturer)121) +#define FITManufacturerJohnsonHealthTech ((FITManufacturer)122) +#define FITManufacturerPolarElectro ((FITManufacturer)123) +#define FITManufacturerSeesense ((FITManufacturer)124) +#define FITManufacturerNciTechnology ((FITManufacturer)125) +#define FITManufacturerIqsquare ((FITManufacturer)126) +#define FITManufacturerLeomo ((FITManufacturer)127) +#define FITManufacturerIfitCom ((FITManufacturer)128) +#define FITManufacturerCorosByte ((FITManufacturer)129) +#define FITManufacturerVersaDesign ((FITManufacturer)130) +#define FITManufacturerChileaf ((FITManufacturer)131) +#define FITManufacturerCycplus ((FITManufacturer)132) +#define FITManufacturerGravaaByte ((FITManufacturer)133) +#define FITManufacturerSigeyi ((FITManufacturer)134) +#define FITManufacturerCoospo ((FITManufacturer)135) +#define FITManufacturerGeoid ((FITManufacturer)136) +#define FITManufacturerBosch ((FITManufacturer)137) +#define FITManufacturerKyto ((FITManufacturer)138) +#define FITManufacturerKineticSports ((FITManufacturer)139) +#define FITManufacturerDecathlonByte ((FITManufacturer)140) +#define FITManufacturerTqSystems ((FITManufacturer)141) +#define FITManufacturerTagHeuer ((FITManufacturer)142) +#define FITManufacturerKeiserFitness ((FITManufacturer)143) +#define FITManufacturerZwiftByte ((FITManufacturer)144) +#define FITManufacturerDevelopment ((FITManufacturer)255) +#define FITManufacturerHealthandlife ((FITManufacturer)257) +#define FITManufacturerLezyne ((FITManufacturer)258) +#define FITManufacturerScribeLabs ((FITManufacturer)259) +#define FITManufacturerZwift ((FITManufacturer)260) +#define FITManufacturerWatteam ((FITManufacturer)261) +#define FITManufacturerRecon ((FITManufacturer)262) +#define FITManufacturerFaveroElectronics ((FITManufacturer)263) +#define FITManufacturerDynovelo ((FITManufacturer)264) +#define FITManufacturerStrava ((FITManufacturer)265) +#define FITManufacturerPrecor ((FITManufacturer)266) // Amer Sports +#define FITManufacturerBryton ((FITManufacturer)267) +#define FITManufacturerSram ((FITManufacturer)268) +#define FITManufacturerNavman ((FITManufacturer)269) // MiTAC Global Corporation (Mio Technology) +#define FITManufacturerCobi ((FITManufacturer)270) // COBI GmbH +#define FITManufacturerSpivi ((FITManufacturer)271) +#define FITManufacturerMioMagellan ((FITManufacturer)272) +#define FITManufacturerEvesports ((FITManufacturer)273) +#define FITManufacturerSensitivusGauge ((FITManufacturer)274) +#define FITManufacturerPodoon ((FITManufacturer)275) +#define FITManufacturerLifeTimeFitness ((FITManufacturer)276) +#define FITManufacturerFalcoEMotors ((FITManufacturer)277) // Falco eMotors Inc. +#define FITManufacturerMinoura ((FITManufacturer)278) +#define FITManufacturerCycliq ((FITManufacturer)279) +#define FITManufacturerLuxottica ((FITManufacturer)280) +#define FITManufacturerTrainerRoad ((FITManufacturer)281) +#define FITManufacturerTheSufferfest ((FITManufacturer)282) +#define FITManufacturerFullspeedahead ((FITManufacturer)283) +#define FITManufacturerVirtualtraining ((FITManufacturer)284) +#define FITManufacturerFeedbacksports ((FITManufacturer)285) +#define FITManufacturerOmata ((FITManufacturer)286) +#define FITManufacturerVdo ((FITManufacturer)287) +#define FITManufacturerMagneticdays ((FITManufacturer)288) +#define FITManufacturerHammerhead ((FITManufacturer)289) +#define FITManufacturerKineticByKurt ((FITManufacturer)290) +#define FITManufacturerShapelog ((FITManufacturer)291) +#define FITManufacturerDabuziduo ((FITManufacturer)292) +#define FITManufacturerJetblack ((FITManufacturer)293) +#define FITManufacturerCoros ((FITManufacturer)294) +#define FITManufacturerVirtugo ((FITManufacturer)295) +#define FITManufacturerVelosense ((FITManufacturer)296) +#define FITManufacturerCycligentinc ((FITManufacturer)297) +#define FITManufacturerTrailforks ((FITManufacturer)298) +#define FITManufacturerMahleEbikemotion ((FITManufacturer)299) +#define FITManufacturerNurvv ((FITManufacturer)300) +#define FITManufacturerMicroprogram ((FITManufacturer)301) +#define FITManufacturerZone5cloud ((FITManufacturer)302) +#define FITManufacturerGreenteg ((FITManufacturer)303) +#define FITManufacturerYamahaMotors ((FITManufacturer)304) +#define FITManufacturerWhoop ((FITManufacturer)305) +#define FITManufacturerGravaa ((FITManufacturer)306) +#define FITManufacturerOnelap ((FITManufacturer)307) +#define FITManufacturerMonarkExercise ((FITManufacturer)308) +#define FITManufacturerForm ((FITManufacturer)309) +#define FITManufacturerDecathlon ((FITManufacturer)310) +#define FITManufacturerSyncros ((FITManufacturer)311) +#define FITManufacturerHeatup ((FITManufacturer)312) +#define FITManufacturerCannondale ((FITManufacturer)313) +#define FITManufacturerTrueFitness ((FITManufacturer)314) +#define FITManufacturerRGTCycling ((FITManufacturer)315) +#define FITManufacturerVasa ((FITManufacturer)316) +#define FITManufacturerRaceRepublic ((FITManufacturer)317) +#define FITManufacturerFazua ((FITManufacturer)318) +#define FITManufacturerOrekaTraining ((FITManufacturer)319) +#define FITManufacturerIsec ((FITManufacturer)320) // Lishun Electric & Communication +#define FITManufacturerLululemonStudio ((FITManufacturer)321) +#define FITManufacturerActigraphcorp ((FITManufacturer)5759) +#define FITManufacturerCount 209 + +typedef FITUInt16 FITGarminProduct; +#define FITGarminProductInvalid FITUInt16Invalid +#define FITGarminProductHrm1 ((FITGarminProduct)1) +#define FITGarminProductAxh01 ((FITGarminProduct)2) // AXH01 HRM chipset +#define FITGarminProductAxb01 ((FITGarminProduct)3) +#define FITGarminProductAxb02 ((FITGarminProduct)4) +#define FITGarminProductHrm2ss ((FITGarminProduct)5) +#define FITGarminProductDsiAlf02 ((FITGarminProduct)6) +#define FITGarminProductHrm3ss ((FITGarminProduct)7) +#define FITGarminProductHrmRunSingleByteProductId ((FITGarminProduct)8) // hrm_run model for HRM ANT+ messaging +#define FITGarminProductBsm ((FITGarminProduct)9) // BSM model for ANT+ messaging +#define FITGarminProductBcm ((FITGarminProduct)10) // BCM model for ANT+ messaging +#define FITGarminProductAxs01 ((FITGarminProduct)11) // AXS01 HRM Bike Chipset model for ANT+ messaging +#define FITGarminProductHrmTriSingleByteProductId ((FITGarminProduct)12) // hrm_tri model for HRM ANT+ messaging +#define FITGarminProductHrm4RunSingleByteProductId ((FITGarminProduct)13) // hrm4 run model for HRM ANT+ messaging +#define FITGarminProductFr225SingleByteProductId ((FITGarminProduct)14) // fr225 model for HRM ANT+ messaging +#define FITGarminProductGen3BsmSingleByteProductId ((FITGarminProduct)15) // gen3_bsm model for Bike Speed ANT+ messaging +#define FITGarminProductGen3BcmSingleByteProductId ((FITGarminProduct)16) // gen3_bcm model for Bike Cadence ANT+ messaging +#define FITGarminProductOHR ((FITGarminProduct)255) // Garmin Wearable Optical Heart Rate Sensor for ANT+ HR Profile Broadcasting +#define FITGarminProductFr301China ((FITGarminProduct)473) +#define FITGarminProductFr301Japan ((FITGarminProduct)474) +#define FITGarminProductFr301Korea ((FITGarminProduct)475) +#define FITGarminProductFr301Taiwan ((FITGarminProduct)494) +#define FITGarminProductFr405 ((FITGarminProduct)717) // Forerunner 405 +#define FITGarminProductFr50 ((FITGarminProduct)782) // Forerunner 50 +#define FITGarminProductFr405Japan ((FITGarminProduct)987) +#define FITGarminProductFr60 ((FITGarminProduct)988) // Forerunner 60 +#define FITGarminProductDsiAlf01 ((FITGarminProduct)1011) +#define FITGarminProductFr310xt ((FITGarminProduct)1018) // Forerunner 310 +#define FITGarminProductEdge500 ((FITGarminProduct)1036) +#define FITGarminProductFr110 ((FITGarminProduct)1124) // Forerunner 110 +#define FITGarminProductEdge800 ((FITGarminProduct)1169) +#define FITGarminProductEdge500Taiwan ((FITGarminProduct)1199) +#define FITGarminProductEdge500Japan ((FITGarminProduct)1213) +#define FITGarminProductChirp ((FITGarminProduct)1253) +#define FITGarminProductFr110Japan ((FITGarminProduct)1274) +#define FITGarminProductEdge200 ((FITGarminProduct)1325) +#define FITGarminProductFr910xt ((FITGarminProduct)1328) +#define FITGarminProductEdge800Taiwan ((FITGarminProduct)1333) +#define FITGarminProductEdge800Japan ((FITGarminProduct)1334) +#define FITGarminProductAlf04 ((FITGarminProduct)1341) +#define FITGarminProductFr610 ((FITGarminProduct)1345) +#define FITGarminProductFr210Japan ((FITGarminProduct)1360) +#define FITGarminProductVectorSs ((FITGarminProduct)1380) +#define FITGarminProductVectorCp ((FITGarminProduct)1381) +#define FITGarminProductEdge800China ((FITGarminProduct)1386) +#define FITGarminProductEdge500China ((FITGarminProduct)1387) +#define FITGarminProductApproachG10 ((FITGarminProduct)1405) +#define FITGarminProductFr610Japan ((FITGarminProduct)1410) +#define FITGarminProductEdge500Korea ((FITGarminProduct)1422) +#define FITGarminProductFr70 ((FITGarminProduct)1436) +#define FITGarminProductFr310xt4t ((FITGarminProduct)1446) +#define FITGarminProductAmx ((FITGarminProduct)1461) +#define FITGarminProductFr10 ((FITGarminProduct)1482) +#define FITGarminProductEdge800Korea ((FITGarminProduct)1497) +#define FITGarminProductSwim ((FITGarminProduct)1499) +#define FITGarminProductFr910xtChina ((FITGarminProduct)1537) +#define FITGarminProductFenix ((FITGarminProduct)1551) +#define FITGarminProductEdge200Taiwan ((FITGarminProduct)1555) +#define FITGarminProductEdge510 ((FITGarminProduct)1561) +#define FITGarminProductEdge810 ((FITGarminProduct)1567) +#define FITGarminProductTempe ((FITGarminProduct)1570) +#define FITGarminProductFr910xtJapan ((FITGarminProduct)1600) +#define FITGarminProductFr620 ((FITGarminProduct)1623) +#define FITGarminProductFr220 ((FITGarminProduct)1632) +#define FITGarminProductFr910xtKorea ((FITGarminProduct)1664) +#define FITGarminProductFr10Japan ((FITGarminProduct)1688) +#define FITGarminProductEdge810Japan ((FITGarminProduct)1721) +#define FITGarminProductVirbElite ((FITGarminProduct)1735) +#define FITGarminProductEdgeTouring ((FITGarminProduct)1736) // Also Edge Touring Plus +#define FITGarminProductEdge510Japan ((FITGarminProduct)1742) +#define FITGarminProductHrmTri ((FITGarminProduct)1743) // Also HRM-Swim +#define FITGarminProductHrmRun ((FITGarminProduct)1752) +#define FITGarminProductFr920xt ((FITGarminProduct)1765) +#define FITGarminProductEdge510Asia ((FITGarminProduct)1821) +#define FITGarminProductEdge810China ((FITGarminProduct)1822) +#define FITGarminProductEdge810Taiwan ((FITGarminProduct)1823) +#define FITGarminProductEdge1000 ((FITGarminProduct)1836) +#define FITGarminProductVivoFit ((FITGarminProduct)1837) +#define FITGarminProductVirbRemote ((FITGarminProduct)1853) +#define FITGarminProductVivoKi ((FITGarminProduct)1885) +#define FITGarminProductFr15 ((FITGarminProduct)1903) +#define FITGarminProductVivoActive ((FITGarminProduct)1907) +#define FITGarminProductEdge510Korea ((FITGarminProduct)1918) +#define FITGarminProductFr620Japan ((FITGarminProduct)1928) +#define FITGarminProductFr620China ((FITGarminProduct)1929) +#define FITGarminProductFr220Japan ((FITGarminProduct)1930) +#define FITGarminProductFr220China ((FITGarminProduct)1931) +#define FITGarminProductApproachS6 ((FITGarminProduct)1936) +#define FITGarminProductVivoSmart ((FITGarminProduct)1956) +#define FITGarminProductFenix2 ((FITGarminProduct)1967) +#define FITGarminProductEpix ((FITGarminProduct)1988) +#define FITGarminProductFenix3 ((FITGarminProduct)2050) +#define FITGarminProductEdge1000Taiwan ((FITGarminProduct)2052) +#define FITGarminProductEdge1000Japan ((FITGarminProduct)2053) +#define FITGarminProductFr15Japan ((FITGarminProduct)2061) +#define FITGarminProductEdge520 ((FITGarminProduct)2067) +#define FITGarminProductEdge1000China ((FITGarminProduct)2070) +#define FITGarminProductFr620Russia ((FITGarminProduct)2072) +#define FITGarminProductFr220Russia ((FITGarminProduct)2073) +#define FITGarminProductVectorS ((FITGarminProduct)2079) +#define FITGarminProductEdge1000Korea ((FITGarminProduct)2100) +#define FITGarminProductFr920xtTaiwan ((FITGarminProduct)2130) +#define FITGarminProductFr920xtChina ((FITGarminProduct)2131) +#define FITGarminProductFr920xtJapan ((FITGarminProduct)2132) +#define FITGarminProductVirbx ((FITGarminProduct)2134) +#define FITGarminProductVivoSmartApac ((FITGarminProduct)2135) +#define FITGarminProductEtrexTouch ((FITGarminProduct)2140) +#define FITGarminProductEdge25 ((FITGarminProduct)2147) +#define FITGarminProductFr25 ((FITGarminProduct)2148) +#define FITGarminProductVivoFit2 ((FITGarminProduct)2150) +#define FITGarminProductFr225 ((FITGarminProduct)2153) +#define FITGarminProductFr630 ((FITGarminProduct)2156) +#define FITGarminProductFr230 ((FITGarminProduct)2157) +#define FITGarminProductFr735xt ((FITGarminProduct)2158) +#define FITGarminProductVivoActiveApac ((FITGarminProduct)2160) +#define FITGarminProductVector2 ((FITGarminProduct)2161) +#define FITGarminProductVector2s ((FITGarminProduct)2162) +#define FITGarminProductVirbxe ((FITGarminProduct)2172) +#define FITGarminProductFr620Taiwan ((FITGarminProduct)2173) +#define FITGarminProductFr220Taiwan ((FITGarminProduct)2174) +#define FITGarminProductTruswing ((FITGarminProduct)2175) +#define FITGarminProductD2airvenu ((FITGarminProduct)2187) +#define FITGarminProductFenix3China ((FITGarminProduct)2188) +#define FITGarminProductFenix3Twn ((FITGarminProduct)2189) +#define FITGarminProductVariaHeadlight ((FITGarminProduct)2192) +#define FITGarminProductVariaTaillightOld ((FITGarminProduct)2193) +#define FITGarminProductEdgeExplore1000 ((FITGarminProduct)2204) +#define FITGarminProductFr225Asia ((FITGarminProduct)2219) +#define FITGarminProductVariaRadarTaillight ((FITGarminProduct)2225) +#define FITGarminProductVariaRadarDisplay ((FITGarminProduct)2226) +#define FITGarminProductEdge20 ((FITGarminProduct)2238) +#define FITGarminProductEdge520Asia ((FITGarminProduct)2260) +#define FITGarminProductEdge520Japan ((FITGarminProduct)2261) +#define FITGarminProductD2Bravo ((FITGarminProduct)2262) +#define FITGarminProductApproachS20 ((FITGarminProduct)2266) +#define FITGarminProductVivoSmart2 ((FITGarminProduct)2271) +#define FITGarminProductEdge1000Thai ((FITGarminProduct)2274) +#define FITGarminProductVariaRemote ((FITGarminProduct)2276) +#define FITGarminProductEdge25Asia ((FITGarminProduct)2288) +#define FITGarminProductEdge25Jpn ((FITGarminProduct)2289) +#define FITGarminProductEdge20Asia ((FITGarminProduct)2290) +#define FITGarminProductApproachX40 ((FITGarminProduct)2292) +#define FITGarminProductFenix3Japan ((FITGarminProduct)2293) +#define FITGarminProductVivoSmartEmea ((FITGarminProduct)2294) +#define FITGarminProductFr630Asia ((FITGarminProduct)2310) +#define FITGarminProductFr630Jpn ((FITGarminProduct)2311) +#define FITGarminProductFr230Jpn ((FITGarminProduct)2313) +#define FITGarminProductHrm4Run ((FITGarminProduct)2327) +#define FITGarminProductEpixJapan ((FITGarminProduct)2332) +#define FITGarminProductVivoActiveHr ((FITGarminProduct)2337) +#define FITGarminProductVivoSmartGpsHr ((FITGarminProduct)2347) +#define FITGarminProductVivoSmartHr ((FITGarminProduct)2348) +#define FITGarminProductVivoSmartHrAsia ((FITGarminProduct)2361) +#define FITGarminProductVivoSmartGpsHrAsia ((FITGarminProduct)2362) +#define FITGarminProductVivoMove ((FITGarminProduct)2368) +#define FITGarminProductVariaTaillight ((FITGarminProduct)2379) +#define FITGarminProductFr235Asia ((FITGarminProduct)2396) +#define FITGarminProductFr235Japan ((FITGarminProduct)2397) +#define FITGarminProductVariaVision ((FITGarminProduct)2398) +#define FITGarminProductVivoFit3 ((FITGarminProduct)2406) +#define FITGarminProductFenix3Korea ((FITGarminProduct)2407) +#define FITGarminProductFenix3Sea ((FITGarminProduct)2408) +#define FITGarminProductFenix3Hr ((FITGarminProduct)2413) +#define FITGarminProductVirbUltra30 ((FITGarminProduct)2417) +#define FITGarminProductIndexSmartScale ((FITGarminProduct)2429) +#define FITGarminProductFr235 ((FITGarminProduct)2431) +#define FITGarminProductFenix3Chronos ((FITGarminProduct)2432) +#define FITGarminProductOregon7xx ((FITGarminProduct)2441) +#define FITGarminProductRino7xx ((FITGarminProduct)2444) +#define FITGarminProductEpixKorea ((FITGarminProduct)2457) +#define FITGarminProductFenix3HrChn ((FITGarminProduct)2473) +#define FITGarminProductFenix3HrTwn ((FITGarminProduct)2474) +#define FITGarminProductFenix3HrJpn ((FITGarminProduct)2475) +#define FITGarminProductFenix3HrSea ((FITGarminProduct)2476) +#define FITGarminProductFenix3HrKor ((FITGarminProduct)2477) +#define FITGarminProductNautix ((FITGarminProduct)2496) +#define FITGarminProductVivoActiveHrApac ((FITGarminProduct)2497) +#define FITGarminProductOregon7xxWw ((FITGarminProduct)2512) +#define FITGarminProductEdge820 ((FITGarminProduct)2530) +#define FITGarminProductEdgeExplore820 ((FITGarminProduct)2531) +#define FITGarminProductFr735xtApac ((FITGarminProduct)2533) +#define FITGarminProductFr735xtJapan ((FITGarminProduct)2534) +#define FITGarminProductFenix5s ((FITGarminProduct)2544) +#define FITGarminProductD2BravoTitanium ((FITGarminProduct)2547) +#define FITGarminProductVariaUt800 ((FITGarminProduct)2567) // Varia UT 800 SW +#define FITGarminProductRunningDynamicsPod ((FITGarminProduct)2593) +#define FITGarminProductEdge820China ((FITGarminProduct)2599) +#define FITGarminProductEdge820Japan ((FITGarminProduct)2600) +#define FITGarminProductFenix5x ((FITGarminProduct)2604) +#define FITGarminProductVivoFitJr ((FITGarminProduct)2606) +#define FITGarminProductVivoSmart3 ((FITGarminProduct)2622) +#define FITGarminProductVivoSport ((FITGarminProduct)2623) +#define FITGarminProductEdge820Taiwan ((FITGarminProduct)2628) +#define FITGarminProductEdge820Korea ((FITGarminProduct)2629) +#define FITGarminProductEdge820Sea ((FITGarminProduct)2630) +#define FITGarminProductFr35Hebrew ((FITGarminProduct)2650) +#define FITGarminProductApproachS60 ((FITGarminProduct)2656) +#define FITGarminProductFr35Apac ((FITGarminProduct)2667) +#define FITGarminProductFr35Japan ((FITGarminProduct)2668) +#define FITGarminProductFenix3ChronosAsia ((FITGarminProduct)2675) +#define FITGarminProductVirb360 ((FITGarminProduct)2687) +#define FITGarminProductFr935 ((FITGarminProduct)2691) +#define FITGarminProductFenix5 ((FITGarminProduct)2697) +#define FITGarminProductVivoactive3 ((FITGarminProduct)2700) +#define FITGarminProductFr235ChinaNfc ((FITGarminProduct)2733) +#define FITGarminProductForetrex601_701 ((FITGarminProduct)2769) +#define FITGarminProductVivoMoveHr ((FITGarminProduct)2772) +#define FITGarminProductEdge1030 ((FITGarminProduct)2713) +#define FITGarminProductFr35Sea ((FITGarminProduct)2727) +#define FITGarminProductVector3 ((FITGarminProduct)2787) +#define FITGarminProductFenix5Asia ((FITGarminProduct)2796) +#define FITGarminProductFenix5sAsia ((FITGarminProduct)2797) +#define FITGarminProductFenix5xAsia ((FITGarminProduct)2798) +#define FITGarminProductApproachZ80 ((FITGarminProduct)2806) +#define FITGarminProductFr35Korea ((FITGarminProduct)2814) +#define FITGarminProductD2charlie ((FITGarminProduct)2819) +#define FITGarminProductVivoSmart3Apac ((FITGarminProduct)2831) +#define FITGarminProductVivoSportApac ((FITGarminProduct)2832) +#define FITGarminProductFr935Asia ((FITGarminProduct)2833) +#define FITGarminProductDescent ((FITGarminProduct)2859) +#define FITGarminProductVivoFit4 ((FITGarminProduct)2878) +#define FITGarminProductFr645 ((FITGarminProduct)2886) +#define FITGarminProductFr645m ((FITGarminProduct)2888) +#define FITGarminProductFr30 ((FITGarminProduct)2891) +#define FITGarminProductFenix5sPlus ((FITGarminProduct)2900) +#define FITGarminProductEdge130 ((FITGarminProduct)2909) +#define FITGarminProductEdge1030Asia ((FITGarminProduct)2924) +#define FITGarminProductVivosmart4 ((FITGarminProduct)2927) +#define FITGarminProductVivoMoveHrAsia ((FITGarminProduct)2945) +#define FITGarminProductApproachX10 ((FITGarminProduct)2962) +#define FITGarminProductFr30Asia ((FITGarminProduct)2977) +#define FITGarminProductVivoactive3mW ((FITGarminProduct)2988) +#define FITGarminProductFr645Asia ((FITGarminProduct)3003) +#define FITGarminProductFr645mAsia ((FITGarminProduct)3004) +#define FITGarminProductEdgeExplore ((FITGarminProduct)3011) +#define FITGarminProductGpsmap66 ((FITGarminProduct)3028) +#define FITGarminProductApproachS10 ((FITGarminProduct)3049) +#define FITGarminProductVivoactive3mL ((FITGarminProduct)3066) +#define FITGarminProductApproachG80 ((FITGarminProduct)3085) +#define FITGarminProductEdge130Asia ((FITGarminProduct)3092) +#define FITGarminProductEdge1030Bontrager ((FITGarminProduct)3095) +#define FITGarminProductFenix5Plus ((FITGarminProduct)3110) +#define FITGarminProductFenix5xPlus ((FITGarminProduct)3111) +#define FITGarminProductEdge520Plus ((FITGarminProduct)3112) +#define FITGarminProductFr945 ((FITGarminProduct)3113) +#define FITGarminProductEdge530 ((FITGarminProduct)3121) +#define FITGarminProductEdge830 ((FITGarminProduct)3122) +#define FITGarminProductInstinctEsports ((FITGarminProduct)3126) +#define FITGarminProductFenix5sPlusApac ((FITGarminProduct)3134) +#define FITGarminProductFenix5xPlusApac ((FITGarminProduct)3135) +#define FITGarminProductEdge520PlusApac ((FITGarminProduct)3142) +#define FITGarminProductFr235lAsia ((FITGarminProduct)3144) +#define FITGarminProductFr245Asia ((FITGarminProduct)3145) +#define FITGarminProductVivoActive3mApac ((FITGarminProduct)3163) +#define FITGarminProductGen3Bsm ((FITGarminProduct)3192) // gen3 bike speed sensor +#define FITGarminProductGen3Bcm ((FITGarminProduct)3193) // gen3 bike cadence sensor +#define FITGarminProductVivoSmart4Asia ((FITGarminProduct)3218) +#define FITGarminProductVivoactive4Small ((FITGarminProduct)3224) +#define FITGarminProductVivoactive4Large ((FITGarminProduct)3225) +#define FITGarminProductVenu ((FITGarminProduct)3226) +#define FITGarminProductMarqDriver ((FITGarminProduct)3246) +#define FITGarminProductMarqAviator ((FITGarminProduct)3247) +#define FITGarminProductMarqCaptain ((FITGarminProduct)3248) +#define FITGarminProductMarqCommander ((FITGarminProduct)3249) +#define FITGarminProductMarqExpedition ((FITGarminProduct)3250) +#define FITGarminProductMarqAthlete ((FITGarminProduct)3251) +#define FITGarminProductDescentMk2 ((FITGarminProduct)3258) +#define FITGarminProductGpsmap66i ((FITGarminProduct)3284) +#define FITGarminProductFenix6SSport ((FITGarminProduct)3287) +#define FITGarminProductFenix6S ((FITGarminProduct)3288) +#define FITGarminProductFenix6Sport ((FITGarminProduct)3289) +#define FITGarminProductFenix6 ((FITGarminProduct)3290) +#define FITGarminProductFenix6x ((FITGarminProduct)3291) +#define FITGarminProductHrmDual ((FITGarminProduct)3299) // HRM-Dual +#define FITGarminProductHrmPro ((FITGarminProduct)3300) // HRM-Pro +#define FITGarminProductVivoMove3Premium ((FITGarminProduct)3308) +#define FITGarminProductApproachS40 ((FITGarminProduct)3314) +#define FITGarminProductFr245mAsia ((FITGarminProduct)3321) +#define FITGarminProductEdge530Apac ((FITGarminProduct)3349) +#define FITGarminProductEdge830Apac ((FITGarminProduct)3350) +#define FITGarminProductVivoMove3 ((FITGarminProduct)3378) +#define FITGarminProductVivoActive4SmallAsia ((FITGarminProduct)3387) +#define FITGarminProductVivoActive4LargeAsia ((FITGarminProduct)3388) +#define FITGarminProductVivoActive4OledAsia ((FITGarminProduct)3389) +#define FITGarminProductSwim2 ((FITGarminProduct)3405) +#define FITGarminProductMarqDriverAsia ((FITGarminProduct)3420) +#define FITGarminProductMarqAviatorAsia ((FITGarminProduct)3421) +#define FITGarminProductVivoMove3Asia ((FITGarminProduct)3422) +#define FITGarminProductFr945Asia ((FITGarminProduct)3441) +#define FITGarminProductVivoActive3tChn ((FITGarminProduct)3446) +#define FITGarminProductMarqCaptainAsia ((FITGarminProduct)3448) +#define FITGarminProductMarqCommanderAsia ((FITGarminProduct)3449) +#define FITGarminProductMarqExpeditionAsia ((FITGarminProduct)3450) +#define FITGarminProductMarqAthleteAsia ((FITGarminProduct)3451) +#define FITGarminProductInstinctSolar ((FITGarminProduct)3466) +#define FITGarminProductFr45Asia ((FITGarminProduct)3469) +#define FITGarminProductVivoactive3Daimler ((FITGarminProduct)3473) +#define FITGarminProductLegacyRey ((FITGarminProduct)3498) +#define FITGarminProductLegacyDarthVader ((FITGarminProduct)3499) +#define FITGarminProductLegacyCaptainMarvel ((FITGarminProduct)3500) +#define FITGarminProductLegacyFirstAvenger ((FITGarminProduct)3501) +#define FITGarminProductFenix6sSportAsia ((FITGarminProduct)3512) +#define FITGarminProductFenix6sAsia ((FITGarminProduct)3513) +#define FITGarminProductFenix6SportAsia ((FITGarminProduct)3514) +#define FITGarminProductFenix6Asia ((FITGarminProduct)3515) +#define FITGarminProductFenix6xAsia ((FITGarminProduct)3516) +#define FITGarminProductLegacyCaptainMarvelAsia ((FITGarminProduct)3535) +#define FITGarminProductLegacyFirstAvengerAsia ((FITGarminProduct)3536) +#define FITGarminProductLegacyReyAsia ((FITGarminProduct)3537) +#define FITGarminProductLegacyDarthVaderAsia ((FITGarminProduct)3538) +#define FITGarminProductDescentMk2s ((FITGarminProduct)3542) +#define FITGarminProductEdge130Plus ((FITGarminProduct)3558) +#define FITGarminProductEdge1030Plus ((FITGarminProduct)3570) +#define FITGarminProductRally200 ((FITGarminProduct)3578) // Rally 100/200 Power Meter Series +#define FITGarminProductFr745 ((FITGarminProduct)3589) +#define FITGarminProductVenusq ((FITGarminProduct)3600) +#define FITGarminProductLily ((FITGarminProduct)3615) +#define FITGarminProductMarqAdventurer ((FITGarminProduct)3624) +#define FITGarminProductEnduro ((FITGarminProduct)3638) +#define FITGarminProductSwim2Apac ((FITGarminProduct)3639) +#define FITGarminProductMarqAdventurerAsia ((FITGarminProduct)3648) +#define FITGarminProductFr945Lte ((FITGarminProduct)3652) +#define FITGarminProductDescentMk2Asia ((FITGarminProduct)3702) // Mk2 and Mk2i +#define FITGarminProductVenu2 ((FITGarminProduct)3703) +#define FITGarminProductVenu2s ((FITGarminProduct)3704) +#define FITGarminProductVenuDaimlerAsia ((FITGarminProduct)3737) +#define FITGarminProductMarqGolfer ((FITGarminProduct)3739) +#define FITGarminProductVenuDaimler ((FITGarminProduct)3740) +#define FITGarminProductFr745Asia ((FITGarminProduct)3794) +#define FITGarminProductLilyAsia ((FITGarminProduct)3809) +#define FITGarminProductEdge1030PlusAsia ((FITGarminProduct)3812) +#define FITGarminProductEdge130PlusAsia ((FITGarminProduct)3813) +#define FITGarminProductApproachS12 ((FITGarminProduct)3823) +#define FITGarminProductEnduroAsia ((FITGarminProduct)3872) +#define FITGarminProductVenusqAsia ((FITGarminProduct)3837) +#define FITGarminProductEdge1040 ((FITGarminProduct)3843) +#define FITGarminProductMarqGolferAsia ((FITGarminProduct)3850) +#define FITGarminProductVenu2Plus ((FITGarminProduct)3851) +#define FITGarminProductFr55 ((FITGarminProduct)3869) +#define FITGarminProductInstinct2 ((FITGarminProduct)3888) +#define FITGarminProductFenix7s ((FITGarminProduct)3905) +#define FITGarminProductFenix7 ((FITGarminProduct)3906) +#define FITGarminProductFenix7x ((FITGarminProduct)3907) +#define FITGarminProductFenix7sApac ((FITGarminProduct)3908) +#define FITGarminProductFenix7Apac ((FITGarminProduct)3909) +#define FITGarminProductFenix7xApac ((FITGarminProduct)3910) +#define FITGarminProductApproachG12 ((FITGarminProduct) 3927) +#define FITGarminProductDescentMk2sAsia ((FITGarminProduct)3930) +#define FITGarminProductApproachS42 ((FITGarminProduct)3934) +#define FITGarminProductEpixGen2 ((FITGarminProduct)3943) +#define FITGarminProductEpixGen2Apac ((FITGarminProduct)3944) +#define FITGarminProductVenu2sAsia ((FITGarminProduct)3949) +#define FITGarminProductVenu2Asia ((FITGarminProduct)3950) +#define FITGarminProductFr945LteAsia ((FITGarminProduct)3978) +#define FITGarminProductVivoMoveSport ((FITGarminProduct)3982) +#define FITGarminProductApproachS12Asia ((FITGarminProduct)3986) +#define FITGarminProductFr255Music ((FITGarminProduct)3990) +#define FITGarminProductFr255SmallMusic ((FITGarminProduct)3991) +#define FITGarminProductFr255 ((FITGarminProduct)3992) +#define FITGarminProductFr255Small ((FITGarminProduct)3993) +#define FITGarminProductApproachG12Asia ((FITGarminProduct) 4001) +#define FITGarminProductApproachS42Asia ((FITGarminProduct)4002) +#define FITGarminProductDescentG1 ((FITGarminProduct)4005) +#define FITGarminProductVenu2PlusAsia ((FITGarminProduct)4017) +#define FITGarminProductFr955 ((FITGarminProduct)4024) +#define FITGarminProductFr55Asia ((FITGarminProduct)4033) +#define FITGarminProductVivosmart5 ((FITGarminProduct)4063) +#define FITGarminProductInstinct2Asia ((FITGarminProduct)4071) +#define FITGarminProductVenusq2 ((FITGarminProduct)4115) +#define FITGarminProductVenusq2music ((FITGarminProduct)4116) +#define FITGarminProductD2AirX10 ((FITGarminProduct)4125) +#define FITGarminProductHrmProPlus ((FITGarminProduct)4130) +#define FITGarminProductDescentG1Asia ((FITGarminProduct)4132) +#define FITGarminProductTactix7 ((FITGarminProduct)4135) +#define FITGarminProductEdgeExplore2 ((FITGarminProduct)4169) +#define FITGarminProductTacxNeoSmart ((FITGarminProduct)4265) // Neo Smart, Tacx +#define FITGarminProductTacxNeo2Smart ((FITGarminProduct)4266) // Neo 2 Smart, Tacx +#define FITGarminProductTacxNeo2TSmart ((FITGarminProduct)4267) // Neo 2T Smart, Tacx +#define FITGarminProductTacxNeoSmartBike ((FITGarminProduct)4268) // Neo Smart Bike, Tacx +#define FITGarminProductTacxSatoriSmart ((FITGarminProduct)4269) // Satori Smart, Tacx +#define FITGarminProductTacxFlowSmart ((FITGarminProduct)4270) // Flow Smart, Tacx +#define FITGarminProductTacxVortexSmart ((FITGarminProduct)4271) // Vortex Smart, Tacx +#define FITGarminProductTacxBushidoSmart ((FITGarminProduct)4272) // Bushido Smart, Tacx +#define FITGarminProductTacxGeniusSmart ((FITGarminProduct)4273) // Genius Smart, Tacx +#define FITGarminProductTacxFluxFluxSSmart ((FITGarminProduct)4274) // Flux/Flux S Smart, Tacx +#define FITGarminProductTacxFlux2Smart ((FITGarminProduct)4275) // Flux 2 Smart, Tacx +#define FITGarminProductTacxMagnum ((FITGarminProduct)4276) // Magnum, Tacx +#define FITGarminProductEdge1040Asia ((FITGarminProduct)4305) +#define FITGarminProductEnduro2 ((FITGarminProduct)4341) +#define FITGarminProductSdm4 ((FITGarminProduct)10007) // SDM4 footpod +#define FITGarminProductEdgeRemote ((FITGarminProduct)10014) +#define FITGarminProductTacxTrainingAppWin ((FITGarminProduct)20533) +#define FITGarminProductTacxTrainingAppMac ((FITGarminProduct)20534) +#define FITGarminProductTacxTrainingAppMacCatalyst ((FITGarminProduct)20565) +#define FITGarminProductTrainingCenter ((FITGarminProduct)20119) +#define FITGarminProductTacxTrainingAppAndroid ((FITGarminProduct)30045) +#define FITGarminProductTacxTrainingAppIos ((FITGarminProduct)30046) +#define FITGarminProductTacxTrainingAppLegacy ((FITGarminProduct)30047) +#define FITGarminProductConnectiqSimulator ((FITGarminProduct)65531) +#define FITGarminProductAndroidAntplusPlugin ((FITGarminProduct)65532) +#define FITGarminProductConnect ((FITGarminProduct)65534) // Garmin Connect website +#define FITGarminProductCount 400 + +typedef FITUInt8 FITAntplusDeviceType; +#define FITAntplusDeviceTypeInvalid FITUInt8Invalid +#define FITAntplusDeviceTypeAntfs ((FITAntplusDeviceType)1) +#define FITAntplusDeviceTypeBikePower ((FITAntplusDeviceType)11) +#define FITAntplusDeviceTypeEnvironmentSensorLegacy ((FITAntplusDeviceType)12) +#define FITAntplusDeviceTypeMultiSportSpeedDistance ((FITAntplusDeviceType)15) +#define FITAntplusDeviceTypeControl ((FITAntplusDeviceType)16) +#define FITAntplusDeviceTypeFitnessEquipment ((FITAntplusDeviceType)17) +#define FITAntplusDeviceTypeBloodPressure ((FITAntplusDeviceType)18) +#define FITAntplusDeviceTypeGeocacheNode ((FITAntplusDeviceType)19) +#define FITAntplusDeviceTypeLightElectricVehicle ((FITAntplusDeviceType)20) +#define FITAntplusDeviceTypeEnvSensor ((FITAntplusDeviceType)25) +#define FITAntplusDeviceTypeRacquet ((FITAntplusDeviceType)26) +#define FITAntplusDeviceTypeControlHub ((FITAntplusDeviceType)27) +#define FITAntplusDeviceTypeMuscleOxygen ((FITAntplusDeviceType)31) +#define FITAntplusDeviceTypeShifting ((FITAntplusDeviceType)34) +#define FITAntplusDeviceTypeBikeLightMain ((FITAntplusDeviceType)35) +#define FITAntplusDeviceTypeBikeLightShared ((FITAntplusDeviceType)36) +#define FITAntplusDeviceTypeExd ((FITAntplusDeviceType)38) +#define FITAntplusDeviceTypeBikeRadar ((FITAntplusDeviceType)40) +#define FITAntplusDeviceTypeBikeAero ((FITAntplusDeviceType)46) +#define FITAntplusDeviceTypeWeightScale ((FITAntplusDeviceType)119) +#define FITAntplusDeviceTypeHeartRate ((FITAntplusDeviceType)120) +#define FITAntplusDeviceTypeBikeSpeedCadence ((FITAntplusDeviceType)121) +#define FITAntplusDeviceTypeBikeCadence ((FITAntplusDeviceType)122) +#define FITAntplusDeviceTypeBikeSpeed ((FITAntplusDeviceType)123) +#define FITAntplusDeviceTypeStrideSpeedDistance ((FITAntplusDeviceType)124) +#define FITAntplusDeviceTypeCount 25 + +typedef FITEnum FITAntNetwork; +#define FITAntNetworkInvalid FITEnumInvalid +#define FITAntNetworkPublic ((FITAntNetwork)0) +#define FITAntNetworkAntplus ((FITAntNetwork)1) +#define FITAntNetworkAntfs ((FITAntNetwork)2) +#define FITAntNetworkPrivate ((FITAntNetwork)3) +#define FITAntNetworkCount 4 + +typedef FITUInt32z FITWorkoutCapabilities; +#define FITWorkoutCapabilitiesInvalid FITUInt32zInvalid +#define FITWorkoutCapabilitiesInterval ((FITWorkoutCapabilities)0x00000001) +#define FITWorkoutCapabilitiesCustom ((FITWorkoutCapabilities)0x00000002) +#define FITWorkoutCapabilitiesFitnessEquipment ((FITWorkoutCapabilities)0x00000004) +#define FITWorkoutCapabilitiesFirstbeat ((FITWorkoutCapabilities)0x00000008) +#define FITWorkoutCapabilitiesNewLeaf ((FITWorkoutCapabilities)0x00000010) +#define FITWorkoutCapabilitiesTcx ((FITWorkoutCapabilities)0x00000020) // For backwards compatibility. Watch should add missing id fields then clear flag. +#define FITWorkoutCapabilitiesSpeed ((FITWorkoutCapabilities)0x00000080) // Speed source required for workout step. +#define FITWorkoutCapabilitiesHeartRate ((FITWorkoutCapabilities)0x00000100) // Heart rate source required for workout step. +#define FITWorkoutCapabilitiesDistance ((FITWorkoutCapabilities)0x00000200) // Distance source required for workout step. +#define FITWorkoutCapabilitiesCadence ((FITWorkoutCapabilities)0x00000400) // Cadence source required for workout step. +#define FITWorkoutCapabilitiesPower ((FITWorkoutCapabilities)0x00000800) // Power source required for workout step. +#define FITWorkoutCapabilitiesGrade ((FITWorkoutCapabilities)0x00001000) // Grade source required for workout step. +#define FITWorkoutCapabilitiesResistance ((FITWorkoutCapabilities)0x00002000) // Resistance source required for workout step. +#define FITWorkoutCapabilitiesProtected ((FITWorkoutCapabilities)0x00004000) +#define FITWorkoutCapabilitiesCount 14 + +typedef FITUInt8 FITBatteryStatus; +#define FITBatteryStatusInvalid FITUInt8Invalid +#define FITBatteryStatusNew ((FITBatteryStatus)1) +#define FITBatteryStatusGood ((FITBatteryStatus)2) +#define FITBatteryStatusOk ((FITBatteryStatus)3) +#define FITBatteryStatusLow ((FITBatteryStatus)4) +#define FITBatteryStatusCritical ((FITBatteryStatus)5) +#define FITBatteryStatusCharging ((FITBatteryStatus)6) +#define FITBatteryStatusUnknown ((FITBatteryStatus)7) +#define FITBatteryStatusCount 7 + +typedef FITEnum FITHrType; +#define FITHrTypeInvalid FITEnumInvalid +#define FITHrTypeNormal ((FITHrType)0) +#define FITHrTypeIrregular ((FITHrType)1) +#define FITHrTypeCount 2 + +typedef FITUInt32z FITCourseCapabilities; +#define FITCourseCapabilitiesInvalid FITUInt32zInvalid +#define FITCourseCapabilitiesProcessed ((FITCourseCapabilities)0x00000001) +#define FITCourseCapabilitiesValid ((FITCourseCapabilities)0x00000002) +#define FITCourseCapabilitiesTime ((FITCourseCapabilities)0x00000004) +#define FITCourseCapabilitiesDistance ((FITCourseCapabilities)0x00000008) +#define FITCourseCapabilitiesPosition ((FITCourseCapabilities)0x00000010) +#define FITCourseCapabilitiesHeartRate ((FITCourseCapabilities)0x00000020) +#define FITCourseCapabilitiesPower ((FITCourseCapabilities)0x00000040) +#define FITCourseCapabilitiesCadence ((FITCourseCapabilities)0x00000080) +#define FITCourseCapabilitiesTraining ((FITCourseCapabilities)0x00000100) +#define FITCourseCapabilitiesNavigation ((FITCourseCapabilities)0x00000200) +#define FITCourseCapabilitiesBikeway ((FITCourseCapabilities)0x00000400) +#define FITCourseCapabilitiesCount 11 + +typedef FITUInt16 FITWeight; +#define FITWeightInvalid FITUInt16Invalid +#define FITWeightCalculating ((FITWeight)0xFFFE) +#define FITWeightCount 1 + +typedef FITUInt32 FITWorkoutHr; // 0 - 100 indicates% of max hr; >100 indicates bpm (255 max) plus 100 +#define FITWorkoutHrInvalid FITUInt32Invalid +#define FITWorkoutHrBpmOffset ((FITWorkoutHr)100) +#define FITWorkoutHrCount 1 + +typedef FITUInt32 FITWorkoutPower; // 0 - 1000 indicates % of functional threshold power; >1000 indicates watts plus 1000. +#define FITWorkoutPowerInvalid FITUInt32Invalid +#define FITWorkoutPowerWattsOffset ((FITWorkoutPower)1000) +#define FITWorkoutPowerCount 1 + +typedef FITEnum FITBpStatus; +#define FITBpStatusInvalid FITEnumInvalid +#define FITBpStatusNoError ((FITBpStatus)0) +#define FITBpStatusErrorIncompleteData ((FITBpStatus)1) +#define FITBpStatusErrorNoMeasurement ((FITBpStatus)2) +#define FITBpStatusErrorDataOutOfRange ((FITBpStatus)3) +#define FITBpStatusErrorIrregularHeartRate ((FITBpStatus)4) +#define FITBpStatusCount 5 + +typedef FITUInt16 FITUserLocalId; +#define FITUserLocalIdInvalid FITUInt16Invalid +#define FITUserLocalIdLocalMin ((FITUserLocalId)0x0000) +#define FITUserLocalIdLocalMax ((FITUserLocalId)0x000F) +#define FITUserLocalIdStationaryMin ((FITUserLocalId)0x0010) +#define FITUserLocalIdStationaryMax ((FITUserLocalId)0x00FF) +#define FITUserLocalIdPortableMin ((FITUserLocalId)0x0100) +#define FITUserLocalIdPortableMax ((FITUserLocalId)0xFFFE) +#define FITUserLocalIdCount 6 + +typedef FITEnum FITSwimStroke; +#define FITSwimStrokeInvalid FITEnumInvalid +#define FITSwimStrokeFreestyle ((FITSwimStroke)0) +#define FITSwimStrokeBackstroke ((FITSwimStroke)1) +#define FITSwimStrokeBreaststroke ((FITSwimStroke)2) +#define FITSwimStrokeButterfly ((FITSwimStroke)3) +#define FITSwimStrokeDrill ((FITSwimStroke)4) +#define FITSwimStrokeMixed ((FITSwimStroke)5) +#define FITSwimStrokeIm ((FITSwimStroke)6) // IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order. +#define FITSwimStrokeCount 7 + +typedef FITEnum FITActivityType; +#define FITActivityTypeInvalid FITEnumInvalid +#define FITActivityTypeGeneric ((FITActivityType)0) +#define FITActivityTypeRunning ((FITActivityType)1) +#define FITActivityTypeCycling ((FITActivityType)2) +#define FITActivityTypeTransition ((FITActivityType)3) // Mulitsport transition +#define FITActivityTypeFitnessEquipment ((FITActivityType)4) +#define FITActivityTypeSwimming ((FITActivityType)5) +#define FITActivityTypeWalking ((FITActivityType)6) +#define FITActivityTypeSedentary ((FITActivityType)8) +#define FITActivityTypeAll ((FITActivityType)254) // All is for goals only to include all sports. +#define FITActivityTypeCount 9 + +typedef FITEnum FITActivitySubtype; +#define FITActivitySubtypeInvalid FITEnumInvalid +#define FITActivitySubtypeGeneric ((FITActivitySubtype)0) +#define FITActivitySubtypeTreadmill ((FITActivitySubtype)1) // Run +#define FITActivitySubtypeStreet ((FITActivitySubtype)2) // Run +#define FITActivitySubtypeTrail ((FITActivitySubtype)3) // Run +#define FITActivitySubtypeTrack ((FITActivitySubtype)4) // Run +#define FITActivitySubtypeSpin ((FITActivitySubtype)5) // Cycling +#define FITActivitySubtypeIndoorCycling ((FITActivitySubtype)6) // Cycling +#define FITActivitySubtypeRoad ((FITActivitySubtype)7) // Cycling +#define FITActivitySubtypeMountain ((FITActivitySubtype)8) // Cycling +#define FITActivitySubtypeDownhill ((FITActivitySubtype)9) // Cycling +#define FITActivitySubtypeRecumbent ((FITActivitySubtype)10) // Cycling +#define FITActivitySubtypeCyclocross ((FITActivitySubtype)11) // Cycling +#define FITActivitySubtypeHandCycling ((FITActivitySubtype)12) // Cycling +#define FITActivitySubtypeTrackCycling ((FITActivitySubtype)13) // Cycling +#define FITActivitySubtypeIndoorRowing ((FITActivitySubtype)14) // Fitness Equipment +#define FITActivitySubtypeElliptical ((FITActivitySubtype)15) // Fitness Equipment +#define FITActivitySubtypeStairClimbing ((FITActivitySubtype)16) // Fitness Equipment +#define FITActivitySubtypeLapSwimming ((FITActivitySubtype)17) // Swimming +#define FITActivitySubtypeOpenWater ((FITActivitySubtype)18) // Swimming +#define FITActivitySubtypeAll ((FITActivitySubtype)254) +#define FITActivitySubtypeCount 20 + +typedef FITEnum FITActivityLevel; +#define FITActivityLevelInvalid FITEnumInvalid +#define FITActivityLevelLow ((FITActivityLevel)0) +#define FITActivityLevelMedium ((FITActivityLevel)1) +#define FITActivityLevelHigh ((FITActivityLevel)2) +#define FITActivityLevelCount 3 + +typedef FITEnum FITSide; +#define FITSideInvalid FITEnumInvalid +#define FITSideRight ((FITSide)0) +#define FITSideLeft ((FITSide)1) +#define FITSideCount 2 + +typedef FITUInt8 FITLeftRightBalance; +#define FITLeftRightBalanceInvalid FITUInt8Invalid +#define FITLeftRightBalanceMask ((FITLeftRightBalance)0x7F) // % contribution +#define FITLeftRightBalanceRight ((FITLeftRightBalance)0x80) // data corresponds to right if set, otherwise unknown +#define FITLeftRightBalanceCount 2 + +typedef FITUInt16 FITLeftRightBalance100; +#define FITLeftRightBalance100Invalid FITUInt16Invalid +#define FITLeftRightBalance100Mask ((FITLeftRightBalance100)0x3FFF) // % contribution scaled by 100 +#define FITLeftRightBalance100Right ((FITLeftRightBalance100)0x8000) // data corresponds to right if set, otherwise unknown +#define FITLeftRightBalance100Count 2 + +typedef FITEnum FITLengthType; +#define FITLengthTypeInvalid FITEnumInvalid +#define FITLengthTypeIdle ((FITLengthType)0) // Rest period. Length with no strokes +#define FITLengthTypeActive ((FITLengthType)1) // Length with strokes. +#define FITLengthTypeCount 2 + +typedef FITEnum FITDayOfWeek; +#define FITDayOfWeekInvalid FITEnumInvalid +#define FITDayOfWeekSunday ((FITDayOfWeek)0) +#define FITDayOfWeekMonday ((FITDayOfWeek)1) +#define FITDayOfWeekTuesday ((FITDayOfWeek)2) +#define FITDayOfWeekWednesday ((FITDayOfWeek)3) +#define FITDayOfWeekThursday ((FITDayOfWeek)4) +#define FITDayOfWeekFriday ((FITDayOfWeek)5) +#define FITDayOfWeekSaturday ((FITDayOfWeek)6) +#define FITDayOfWeekCount 7 + +typedef FITUInt32z FITConnectivityCapabilities; +#define FITConnectivityCapabilitiesInvalid FITUInt32zInvalid +#define FITConnectivityCapabilitiesBluetooth ((FITConnectivityCapabilities)0x00000001) +#define FITConnectivityCapabilitiesBluetoothLe ((FITConnectivityCapabilities)0x00000002) +#define FITConnectivityCapabilitiesAnt ((FITConnectivityCapabilities)0x00000004) +#define FITConnectivityCapabilitiesActivityUpload ((FITConnectivityCapabilities)0x00000008) +#define FITConnectivityCapabilitiesCourseDownload ((FITConnectivityCapabilities)0x00000010) +#define FITConnectivityCapabilitiesWorkoutDownload ((FITConnectivityCapabilities)0x00000020) +#define FITConnectivityCapabilitiesLiveTrack ((FITConnectivityCapabilities)0x00000040) +#define FITConnectivityCapabilitiesWeatherConditions ((FITConnectivityCapabilities)0x00000080) +#define FITConnectivityCapabilitiesWeatherAlerts ((FITConnectivityCapabilities)0x00000100) +#define FITConnectivityCapabilitiesGpsEphemerisDownload ((FITConnectivityCapabilities)0x00000200) +#define FITConnectivityCapabilitiesExplicitArchive ((FITConnectivityCapabilities)0x00000400) +#define FITConnectivityCapabilitiesSetupIncomplete ((FITConnectivityCapabilities)0x00000800) +#define FITConnectivityCapabilitiesContinueSyncAfterSoftwareUpdate ((FITConnectivityCapabilities)0x00001000) +#define FITConnectivityCapabilitiesConnectIqAppDownload ((FITConnectivityCapabilities)0x00002000) +#define FITConnectivityCapabilitiesGolfCourseDownload ((FITConnectivityCapabilities)0x00004000) +#define FITConnectivityCapabilitiesDeviceInitiatesSync ((FITConnectivityCapabilities)0x00008000) // Indicates device is in control of initiating all syncs +#define FITConnectivityCapabilitiesConnectIqWatchAppDownload ((FITConnectivityCapabilities)0x00010000) +#define FITConnectivityCapabilitiesConnectIqWidgetDownload ((FITConnectivityCapabilities)0x00020000) +#define FITConnectivityCapabilitiesConnectIqWatchFaceDownload ((FITConnectivityCapabilities)0x00040000) +#define FITConnectivityCapabilitiesConnectIqDataFieldDownload ((FITConnectivityCapabilities)0x00080000) +#define FITConnectivityCapabilitiesConnectIqAppManagment ((FITConnectivityCapabilities)0x00100000) // Device supports delete and reorder of apps via GCM +#define FITConnectivityCapabilitiesSwingSensor ((FITConnectivityCapabilities)0x00200000) +#define FITConnectivityCapabilitiesSwingSensorRemote ((FITConnectivityCapabilities)0x00400000) +#define FITConnectivityCapabilitiesIncidentDetection ((FITConnectivityCapabilities)0x00800000) // Device supports incident detection +#define FITConnectivityCapabilitiesAudioPrompts ((FITConnectivityCapabilities)0x01000000) +#define FITConnectivityCapabilitiesWifiVerification ((FITConnectivityCapabilities)0x02000000) // Device supports reporting wifi verification via GCM +#define FITConnectivityCapabilitiesTrueUp ((FITConnectivityCapabilities)0x04000000) // Device supports True Up +#define FITConnectivityCapabilitiesFindMyWatch ((FITConnectivityCapabilities)0x08000000) // Device supports Find My Watch +#define FITConnectivityCapabilitiesRemoteManualSync ((FITConnectivityCapabilities)0x10000000) +#define FITConnectivityCapabilitiesLiveTrackAutoStart ((FITConnectivityCapabilities)0x20000000) // Device supports LiveTrack auto start +#define FITConnectivityCapabilitiesLiveTrackMessaging ((FITConnectivityCapabilities)0x40000000) // Device supports LiveTrack Messaging +#define FITConnectivityCapabilitiesInstantInput ((FITConnectivityCapabilities)0x80000000) // Device supports instant input feature +#define FITConnectivityCapabilitiesCount 32 + +typedef FITEnum FITWeatherReport; +#define FITWeatherReportInvalid FITEnumInvalid +#define FITWeatherReportCurrent ((FITWeatherReport)0) +#define FITWeatherReportForecast ((FITWeatherReport)1) // Deprecated use hourly_forecast instead +#define FITWeatherReportHourlyForecast ((FITWeatherReport)1) +#define FITWeatherReportDailyForecast ((FITWeatherReport)2) +#define FITWeatherReportCount 4 + +typedef FITEnum FITWeatherStatus; +#define FITWeatherStatusInvalid FITEnumInvalid +#define FITWeatherStatusClear ((FITWeatherStatus)0) +#define FITWeatherStatusPartlyCloudy ((FITWeatherStatus)1) +#define FITWeatherStatusMostlyCloudy ((FITWeatherStatus)2) +#define FITWeatherStatusRain ((FITWeatherStatus)3) +#define FITWeatherStatusSnow ((FITWeatherStatus)4) +#define FITWeatherStatusWindy ((FITWeatherStatus)5) +#define FITWeatherStatusThunderstorms ((FITWeatherStatus)6) +#define FITWeatherStatusWintryMix ((FITWeatherStatus)7) +#define FITWeatherStatusFog ((FITWeatherStatus)8) +#define FITWeatherStatusHazy ((FITWeatherStatus)11) +#define FITWeatherStatusHail ((FITWeatherStatus)12) +#define FITWeatherStatusScatteredShowers ((FITWeatherStatus)13) +#define FITWeatherStatusScatteredThunderstorms ((FITWeatherStatus)14) +#define FITWeatherStatusUnknownPrecipitation ((FITWeatherStatus)15) +#define FITWeatherStatusLightRain ((FITWeatherStatus)16) +#define FITWeatherStatusHeavyRain ((FITWeatherStatus)17) +#define FITWeatherStatusLightSnow ((FITWeatherStatus)18) +#define FITWeatherStatusHeavySnow ((FITWeatherStatus)19) +#define FITWeatherStatusLightRainSnow ((FITWeatherStatus)20) +#define FITWeatherStatusHeavyRainSnow ((FITWeatherStatus)21) +#define FITWeatherStatusCloudy ((FITWeatherStatus)22) +#define FITWeatherStatusCount 21 + +typedef FITEnum FITWeatherSeverity; +#define FITWeatherSeverityInvalid FITEnumInvalid +#define FITWeatherSeverityUnknown ((FITWeatherSeverity)0) +#define FITWeatherSeverityWarning ((FITWeatherSeverity)1) +#define FITWeatherSeverityWatch ((FITWeatherSeverity)2) +#define FITWeatherSeverityAdvisory ((FITWeatherSeverity)3) +#define FITWeatherSeverityStatement ((FITWeatherSeverity)4) +#define FITWeatherSeverityCount 5 + +typedef FITEnum FITWeatherSevereType; +#define FITWeatherSevereTypeInvalid FITEnumInvalid +#define FITWeatherSevereTypeUnspecified ((FITWeatherSevereType)0) +#define FITWeatherSevereTypeTornado ((FITWeatherSevereType)1) +#define FITWeatherSevereTypeTsunami ((FITWeatherSevereType)2) +#define FITWeatherSevereTypeHurricane ((FITWeatherSevereType)3) +#define FITWeatherSevereTypeExtremeWind ((FITWeatherSevereType)4) +#define FITWeatherSevereTypeTyphoon ((FITWeatherSevereType)5) +#define FITWeatherSevereTypeInlandHurricane ((FITWeatherSevereType)6) +#define FITWeatherSevereTypeHurricaneForceWind ((FITWeatherSevereType)7) +#define FITWeatherSevereTypeWaterspout ((FITWeatherSevereType)8) +#define FITWeatherSevereTypeSevereThunderstorm ((FITWeatherSevereType)9) +#define FITWeatherSevereTypeWreckhouseWinds ((FITWeatherSevereType)10) +#define FITWeatherSevereTypeLesSuetesWind ((FITWeatherSevereType)11) +#define FITWeatherSevereTypeAvalanche ((FITWeatherSevereType)12) +#define FITWeatherSevereTypeFlashFlood ((FITWeatherSevereType)13) +#define FITWeatherSevereTypeTropicalStorm ((FITWeatherSevereType)14) +#define FITWeatherSevereTypeInlandTropicalStorm ((FITWeatherSevereType)15) +#define FITWeatherSevereTypeBlizzard ((FITWeatherSevereType)16) +#define FITWeatherSevereTypeIceStorm ((FITWeatherSevereType)17) +#define FITWeatherSevereTypeFreezingRain ((FITWeatherSevereType)18) +#define FITWeatherSevereTypeDebrisFlow ((FITWeatherSevereType)19) +#define FITWeatherSevereTypeFlashFreeze ((FITWeatherSevereType)20) +#define FITWeatherSevereTypeDustStorm ((FITWeatherSevereType)21) +#define FITWeatherSevereTypeHighWind ((FITWeatherSevereType)22) +#define FITWeatherSevereTypeWinterStorm ((FITWeatherSevereType)23) +#define FITWeatherSevereTypeHeavyFreezingSpray ((FITWeatherSevereType)24) +#define FITWeatherSevereTypeExtremeCold ((FITWeatherSevereType)25) +#define FITWeatherSevereTypeWindChill ((FITWeatherSevereType)26) +#define FITWeatherSevereTypeColdWave ((FITWeatherSevereType)27) +#define FITWeatherSevereTypeHeavySnowAlert ((FITWeatherSevereType)28) +#define FITWeatherSevereTypeLakeEffectBlowingSnow ((FITWeatherSevereType)29) +#define FITWeatherSevereTypeSnowSquall ((FITWeatherSevereType)30) +#define FITWeatherSevereTypeLakeEffectSnow ((FITWeatherSevereType)31) +#define FITWeatherSevereTypeWinterWeather ((FITWeatherSevereType)32) +#define FITWeatherSevereTypeSleet ((FITWeatherSevereType)33) +#define FITWeatherSevereTypeSnowfall ((FITWeatherSevereType)34) +#define FITWeatherSevereTypeSnowAndBlowingSnow ((FITWeatherSevereType)35) +#define FITWeatherSevereTypeBlowingSnow ((FITWeatherSevereType)36) +#define FITWeatherSevereTypeSnowAlert ((FITWeatherSevereType)37) +#define FITWeatherSevereTypeArcticOutflow ((FITWeatherSevereType)38) +#define FITWeatherSevereTypeFreezingDrizzle ((FITWeatherSevereType)39) +#define FITWeatherSevereTypeStorm ((FITWeatherSevereType)40) +#define FITWeatherSevereTypeStormSurge ((FITWeatherSevereType)41) +#define FITWeatherSevereTypeRainfall ((FITWeatherSevereType)42) +#define FITWeatherSevereTypeArealFlood ((FITWeatherSevereType)43) +#define FITWeatherSevereTypeCoastalFlood ((FITWeatherSevereType)44) +#define FITWeatherSevereTypeLakeshoreFlood ((FITWeatherSevereType)45) +#define FITWeatherSevereTypeExcessiveHeat ((FITWeatherSevereType)46) +#define FITWeatherSevereTypeHeat ((FITWeatherSevereType)47) +#define FITWeatherSevereTypeWeather ((FITWeatherSevereType)48) +#define FITWeatherSevereTypeHighHeatAndHumidity ((FITWeatherSevereType)49) +#define FITWeatherSevereTypeHumidexAndHealth ((FITWeatherSevereType)50) +#define FITWeatherSevereTypeHumidex ((FITWeatherSevereType)51) +#define FITWeatherSevereTypeGale ((FITWeatherSevereType)52) +#define FITWeatherSevereTypeFreezingSpray ((FITWeatherSevereType)53) +#define FITWeatherSevereTypeSpecialMarine ((FITWeatherSevereType)54) +#define FITWeatherSevereTypeSquall ((FITWeatherSevereType)55) +#define FITWeatherSevereTypeStrongWind ((FITWeatherSevereType)56) +#define FITWeatherSevereTypeLakeWind ((FITWeatherSevereType)57) +#define FITWeatherSevereTypeMarineWeather ((FITWeatherSevereType)58) +#define FITWeatherSevereTypeWind ((FITWeatherSevereType)59) +#define FITWeatherSevereTypeSmallCraftHazardousSeas ((FITWeatherSevereType)60) +#define FITWeatherSevereTypeHazardousSeas ((FITWeatherSevereType)61) +#define FITWeatherSevereTypeSmallCraft ((FITWeatherSevereType)62) +#define FITWeatherSevereTypeSmallCraftWinds ((FITWeatherSevereType)63) +#define FITWeatherSevereTypeSmallCraftRoughBar ((FITWeatherSevereType)64) +#define FITWeatherSevereTypeHighWaterLevel ((FITWeatherSevereType)65) +#define FITWeatherSevereTypeAshfall ((FITWeatherSevereType)66) +#define FITWeatherSevereTypeFreezingFog ((FITWeatherSevereType)67) +#define FITWeatherSevereTypeDenseFog ((FITWeatherSevereType)68) +#define FITWeatherSevereTypeDenseSmoke ((FITWeatherSevereType)69) +#define FITWeatherSevereTypeBlowingDust ((FITWeatherSevereType)70) +#define FITWeatherSevereTypeHardFreeze ((FITWeatherSevereType)71) +#define FITWeatherSevereTypeFreeze ((FITWeatherSevereType)72) +#define FITWeatherSevereTypeFrost ((FITWeatherSevereType)73) +#define FITWeatherSevereTypeFireWeather ((FITWeatherSevereType)74) +#define FITWeatherSevereTypeFlood ((FITWeatherSevereType)75) +#define FITWeatherSevereTypeRipTide ((FITWeatherSevereType)76) +#define FITWeatherSevereTypeHighSurf ((FITWeatherSevereType)77) +#define FITWeatherSevereTypeSmog ((FITWeatherSevereType)78) +#define FITWeatherSevereTypeAirQuality ((FITWeatherSevereType)79) +#define FITWeatherSevereTypeBriskWind ((FITWeatherSevereType)80) +#define FITWeatherSevereTypeAirStagnation ((FITWeatherSevereType)81) +#define FITWeatherSevereTypeLowWater ((FITWeatherSevereType)82) +#define FITWeatherSevereTypeHydrological ((FITWeatherSevereType)83) +#define FITWeatherSevereTypeSpecialWeather ((FITWeatherSevereType)84) +#define FITWeatherSevereTypeCount 85 + +typedef FITUInt32 FITTimeIntoDay; // number of seconds into the day since 00:00:00 UTC +#define FITTimeIntoDayInvalid FITUInt32Invalid +#define FITTimeIntoDayCount 0 + +typedef FITUInt32 FITLocaltimeIntoDay; // number of seconds into the day since local 00:00:00 +#define FITLocaltimeIntoDayInvalid FITUInt32Invalid +#define FITLocaltimeIntoDayCount 0 + +typedef FITEnum FITStrokeType; +#define FITStrokeTypeInvalid FITEnumInvalid +#define FITStrokeTypeNoEvent ((FITStrokeType)0) +#define FITStrokeTypeOther ((FITStrokeType)1) // stroke was detected but cannot be identified +#define FITStrokeTypeServe ((FITStrokeType)2) +#define FITStrokeTypeForehand ((FITStrokeType)3) +#define FITStrokeTypeBackhand ((FITStrokeType)4) +#define FITStrokeTypeSmash ((FITStrokeType)5) +#define FITStrokeTypeCount 6 + +typedef FITEnum FITBodyLocation; +#define FITBodyLocationInvalid FITEnumInvalid +#define FITBodyLocationLeftLeg ((FITBodyLocation)0) +#define FITBodyLocationLeftCalf ((FITBodyLocation)1) +#define FITBodyLocationLeftShin ((FITBodyLocation)2) +#define FITBodyLocationLeftHamstring ((FITBodyLocation)3) +#define FITBodyLocationLeftQuad ((FITBodyLocation)4) +#define FITBodyLocationLeftGlute ((FITBodyLocation)5) +#define FITBodyLocationRightLeg ((FITBodyLocation)6) +#define FITBodyLocationRightCalf ((FITBodyLocation)7) +#define FITBodyLocationRightShin ((FITBodyLocation)8) +#define FITBodyLocationRightHamstring ((FITBodyLocation)9) +#define FITBodyLocationRightQuad ((FITBodyLocation)10) +#define FITBodyLocationRightGlute ((FITBodyLocation)11) +#define FITBodyLocationTorsoBack ((FITBodyLocation)12) +#define FITBodyLocationLeftLowerBack ((FITBodyLocation)13) +#define FITBodyLocationLeftUpperBack ((FITBodyLocation)14) +#define FITBodyLocationRightLowerBack ((FITBodyLocation)15) +#define FITBodyLocationRightUpperBack ((FITBodyLocation)16) +#define FITBodyLocationTorsoFront ((FITBodyLocation)17) +#define FITBodyLocationLeftAbdomen ((FITBodyLocation)18) +#define FITBodyLocationLeftChest ((FITBodyLocation)19) +#define FITBodyLocationRightAbdomen ((FITBodyLocation)20) +#define FITBodyLocationRightChest ((FITBodyLocation)21) +#define FITBodyLocationLeftArm ((FITBodyLocation)22) +#define FITBodyLocationLeftShoulder ((FITBodyLocation)23) +#define FITBodyLocationLeftBicep ((FITBodyLocation)24) +#define FITBodyLocationLeftTricep ((FITBodyLocation)25) +#define FITBodyLocationLeftBrachioradialis ((FITBodyLocation)26) // Left anterior forearm +#define FITBodyLocationLeftForearmExtensors ((FITBodyLocation)27) // Left posterior forearm +#define FITBodyLocationRightArm ((FITBodyLocation)28) +#define FITBodyLocationRightShoulder ((FITBodyLocation)29) +#define FITBodyLocationRightBicep ((FITBodyLocation)30) +#define FITBodyLocationRightTricep ((FITBodyLocation)31) +#define FITBodyLocationRightBrachioradialis ((FITBodyLocation)32) // Right anterior forearm +#define FITBodyLocationRightForearmExtensors ((FITBodyLocation)33) // Right posterior forearm +#define FITBodyLocationNeck ((FITBodyLocation)34) +#define FITBodyLocationThroat ((FITBodyLocation)35) +#define FITBodyLocationWaistMidBack ((FITBodyLocation)36) +#define FITBodyLocationWaistFront ((FITBodyLocation)37) +#define FITBodyLocationWaistLeft ((FITBodyLocation)38) +#define FITBodyLocationWaistRight ((FITBodyLocation)39) +#define FITBodyLocationCount 40 + +typedef FITEnum FITSegmentLapStatus; +#define FITSegmentLapStatusInvalid FITEnumInvalid +#define FITSegmentLapStatusEnd ((FITSegmentLapStatus)0) +#define FITSegmentLapStatusFail ((FITSegmentLapStatus)1) +#define FITSegmentLapStatusCount 2 + +typedef FITEnum FITSegmentLeaderboardType; +#define FITSegmentLeaderboardTypeInvalid FITEnumInvalid +#define FITSegmentLeaderboardTypeOverall ((FITSegmentLeaderboardType)0) +#define FITSegmentLeaderboardTypePersonalBest ((FITSegmentLeaderboardType)1) +#define FITSegmentLeaderboardTypeConnections ((FITSegmentLeaderboardType)2) +#define FITSegmentLeaderboardTypeGroup ((FITSegmentLeaderboardType)3) +#define FITSegmentLeaderboardTypeChallenger ((FITSegmentLeaderboardType)4) +#define FITSegmentLeaderboardTypeKom ((FITSegmentLeaderboardType)5) +#define FITSegmentLeaderboardTypeQom ((FITSegmentLeaderboardType)6) +#define FITSegmentLeaderboardTypePr ((FITSegmentLeaderboardType)7) +#define FITSegmentLeaderboardTypeGoal ((FITSegmentLeaderboardType)8) +#define FITSegmentLeaderboardTypeRival ((FITSegmentLeaderboardType)9) +#define FITSegmentLeaderboardTypeClubLeader ((FITSegmentLeaderboardType)10) +#define FITSegmentLeaderboardTypeCount 11 + +typedef FITEnum FITSegmentDeleteStatus; +#define FITSegmentDeleteStatusInvalid FITEnumInvalid +#define FITSegmentDeleteStatusDoNotDelete ((FITSegmentDeleteStatus)0) +#define FITSegmentDeleteStatusDeleteOne ((FITSegmentDeleteStatus)1) +#define FITSegmentDeleteStatusDeleteAll ((FITSegmentDeleteStatus)2) +#define FITSegmentDeleteStatusCount 3 + +typedef FITEnum FITSegmentSelectionType; +#define FITSegmentSelectionTypeInvalid FITEnumInvalid +#define FITSegmentSelectionTypeStarred ((FITSegmentSelectionType)0) +#define FITSegmentSelectionTypeSuggested ((FITSegmentSelectionType)1) +#define FITSegmentSelectionTypeCount 2 + +typedef FITEnum FITSourceType; +#define FITSourceTypeInvalid FITEnumInvalid +#define FITSourceTypeAnt ((FITSourceType)0) // External device connected with ANT +#define FITSourceTypeAntplus ((FITSourceType)1) // External device connected with ANT+ +#define FITSourceTypeBluetooth ((FITSourceType)2) // External device connected with BT +#define FITSourceTypeBluetoothLowEnergy ((FITSourceType)3) // External device connected with BLE +#define FITSourceTypeWifi ((FITSourceType)4) // External device connected with Wifi +#define FITSourceTypeLocal ((FITSourceType)5) // Onboard device +#define FITSourceTypeCount 6 + +typedef FITUInt8 FITLocalDeviceType; +#define FITLocalDeviceTypeInvalid FITUInt8Invalid +#define FITLocalDeviceTypeCount 0 + +typedef FITEnum FITDisplayOrientation; +#define FITDisplayOrientationInvalid FITEnumInvalid +#define FITDisplayOrientationAuto ((FITDisplayOrientation)0) // automatic if the device supports it +#define FITDisplayOrientationPortrait ((FITDisplayOrientation)1) +#define FITDisplayOrientationLandscape ((FITDisplayOrientation)2) +#define FITDisplayOrientationPortraitFlipped ((FITDisplayOrientation)3) // portrait mode but rotated 180 degrees +#define FITDisplayOrientationLandscapeFlipped ((FITDisplayOrientation)4) // landscape mode but rotated 180 degrees +#define FITDisplayOrientationCount 5 + +typedef FITEnum FITWorkoutEquipment; +#define FITWorkoutEquipmentInvalid FITEnumInvalid +#define FITWorkoutEquipmentNone ((FITWorkoutEquipment)0) +#define FITWorkoutEquipmentSwimFins ((FITWorkoutEquipment)1) +#define FITWorkoutEquipmentSwimKickboard ((FITWorkoutEquipment)2) +#define FITWorkoutEquipmentSwimPaddles ((FITWorkoutEquipment)3) +#define FITWorkoutEquipmentSwimPullBuoy ((FITWorkoutEquipment)4) +#define FITWorkoutEquipmentSwimSnorkel ((FITWorkoutEquipment)5) +#define FITWorkoutEquipmentCount 6 + +typedef FITEnum FITWatchfaceMode; +#define FITWatchfaceModeInvalid FITEnumInvalid +#define FITWatchfaceModeDigital ((FITWatchfaceMode)0) +#define FITWatchfaceModeAnalog ((FITWatchfaceMode)1) +#define FITWatchfaceModeConnectIq ((FITWatchfaceMode)2) +#define FITWatchfaceModeDisabled ((FITWatchfaceMode)3) +#define FITWatchfaceModeCount 4 + +typedef FITEnum FITDigitalWatchfaceLayout; +#define FITDigitalWatchfaceLayoutInvalid FITEnumInvalid +#define FITDigitalWatchfaceLayoutTraditional ((FITDigitalWatchfaceLayout)0) +#define FITDigitalWatchfaceLayoutModern ((FITDigitalWatchfaceLayout)1) +#define FITDigitalWatchfaceLayoutBold ((FITDigitalWatchfaceLayout)2) +#define FITDigitalWatchfaceLayoutCount 3 + +typedef FITEnum FITAnalogWatchfaceLayout; +#define FITAnalogWatchfaceLayoutInvalid FITEnumInvalid +#define FITAnalogWatchfaceLayoutMinimal ((FITAnalogWatchfaceLayout)0) +#define FITAnalogWatchfaceLayoutTraditional ((FITAnalogWatchfaceLayout)1) +#define FITAnalogWatchfaceLayoutModern ((FITAnalogWatchfaceLayout)2) +#define FITAnalogWatchfaceLayoutCount 3 + +typedef FITEnum FITRiderPositionType; +#define FITRiderPositionTypeInvalid FITEnumInvalid +#define FITRiderPositionTypeSeated ((FITRiderPositionType)0) +#define FITRiderPositionTypeStanding ((FITRiderPositionType)1) +#define FITRiderPositionTypeTransitionToSeated ((FITRiderPositionType)2) +#define FITRiderPositionTypeTransitionToStanding ((FITRiderPositionType)3) +#define FITRiderPositionTypeCount 4 + +typedef FITEnum FITPowerPhaseType; +#define FITPowerPhaseTypeInvalid FITEnumInvalid +#define FITPowerPhaseTypePowerPhaseStartAngle ((FITPowerPhaseType)0) +#define FITPowerPhaseTypePowerPhaseEndAngle ((FITPowerPhaseType)1) +#define FITPowerPhaseTypePowerPhaseArcLength ((FITPowerPhaseType)2) +#define FITPowerPhaseTypePowerPhaseCenter ((FITPowerPhaseType)3) +#define FITPowerPhaseTypeCount 4 + +typedef FITEnum FITCameraEventType; +#define FITCameraEventTypeInvalid FITEnumInvalid +#define FITCameraEventTypeVideoStart ((FITCameraEventType)0) // Start of video recording +#define FITCameraEventTypeVideoSplit ((FITCameraEventType)1) // Mark of video file split (end of one file, beginning of the other) +#define FITCameraEventTypeVideoEnd ((FITCameraEventType)2) // End of video recording +#define FITCameraEventTypePhotoTaken ((FITCameraEventType)3) // Still photo taken +#define FITCameraEventTypeVideoSecondStreamStart ((FITCameraEventType)4) +#define FITCameraEventTypeVideoSecondStreamSplit ((FITCameraEventType)5) +#define FITCameraEventTypeVideoSecondStreamEnd ((FITCameraEventType)6) +#define FITCameraEventTypeVideoSplitStart ((FITCameraEventType)7) // Mark of video file split start +#define FITCameraEventTypeVideoSecondStreamSplitStart ((FITCameraEventType)8) +#define FITCameraEventTypeVideoPause ((FITCameraEventType)11) // Mark when a video recording has been paused +#define FITCameraEventTypeVideoSecondStreamPause ((FITCameraEventType)12) +#define FITCameraEventTypeVideoResume ((FITCameraEventType)13) // Mark when a video recording has been resumed +#define FITCameraEventTypeVideoSecondStreamResume ((FITCameraEventType)14) +#define FITCameraEventTypeCount 13 + +typedef FITEnum FITSensorType; +#define FITSensorTypeInvalid FITEnumInvalid +#define FITSensorTypeAccelerometer ((FITSensorType)0) +#define FITSensorTypeGyroscope ((FITSensorType)1) +#define FITSensorTypeCompass ((FITSensorType)2) // Magnetometer +#define FITSensorTypeBarometer ((FITSensorType)3) +#define FITSensorTypeCount 4 + +typedef FITEnum FITBikeLightNetworkConfigType; +#define FITBikeLightNetworkConfigTypeInvalid FITEnumInvalid +#define FITBikeLightNetworkConfigTypeAuto ((FITBikeLightNetworkConfigType)0) +#define FITBikeLightNetworkConfigTypeIndividual ((FITBikeLightNetworkConfigType)4) +#define FITBikeLightNetworkConfigTypeHighVisibility ((FITBikeLightNetworkConfigType)5) +#define FITBikeLightNetworkConfigTypeTrail ((FITBikeLightNetworkConfigType)6) +#define FITBikeLightNetworkConfigTypeCount 4 + +typedef FITUInt16 FITCommTimeoutType; +#define FITCommTimeoutTypeInvalid FITUInt16Invalid +#define FITCommTimeoutTypeWildcardPairingTimeout ((FITCommTimeoutType)0) // Timeout pairing to any device +#define FITCommTimeoutTypePairingTimeout ((FITCommTimeoutType)1) // Timeout pairing to previously paired device +#define FITCommTimeoutTypeConnectionLost ((FITCommTimeoutType)2) // Temporary loss of communications +#define FITCommTimeoutTypeConnectionTimeout ((FITCommTimeoutType)3) // Connection closed due to extended bad communications +#define FITCommTimeoutTypeCount 4 + +typedef FITEnum FITCameraOrientationType; +#define FITCameraOrientationTypeInvalid FITEnumInvalid +#define FITCameraOrientationTypeCameraOrientation0 ((FITCameraOrientationType)0) +#define FITCameraOrientationTypeCameraOrientation90 ((FITCameraOrientationType)1) +#define FITCameraOrientationTypeCameraOrientation180 ((FITCameraOrientationType)2) +#define FITCameraOrientationTypeCameraOrientation270 ((FITCameraOrientationType)3) +#define FITCameraOrientationTypeCount 4 + +typedef FITEnum FITAttitudeStage; +#define FITAttitudeStageInvalid FITEnumInvalid +#define FITAttitudeStageFailed ((FITAttitudeStage)0) +#define FITAttitudeStageAligning ((FITAttitudeStage)1) +#define FITAttitudeStageDegraded ((FITAttitudeStage)2) +#define FITAttitudeStageValid ((FITAttitudeStage)3) +#define FITAttitudeStageCount 4 + +typedef FITUInt16 FITAttitudeValidity; +#define FITAttitudeValidityInvalid FITUInt16Invalid +#define FITAttitudeValidityTrackAngleHeadingValid ((FITAttitudeValidity)0x0001) +#define FITAttitudeValidityPitchValid ((FITAttitudeValidity)0x0002) +#define FITAttitudeValidityRollValid ((FITAttitudeValidity)0x0004) +#define FITAttitudeValidityLateralBodyAccelValid ((FITAttitudeValidity)0x0008) +#define FITAttitudeValidityNormalBodyAccelValid ((FITAttitudeValidity)0x0010) +#define FITAttitudeValidityTurnRateValid ((FITAttitudeValidity)0x0020) +#define FITAttitudeValidityHwFail ((FITAttitudeValidity)0x0040) +#define FITAttitudeValidityMagInvalid ((FITAttitudeValidity)0x0080) +#define FITAttitudeValidityNoGps ((FITAttitudeValidity)0x0100) +#define FITAttitudeValidityGpsInvalid ((FITAttitudeValidity)0x0200) +#define FITAttitudeValiditySolutionCoasting ((FITAttitudeValidity)0x0400) +#define FITAttitudeValidityTrueTrackAngle ((FITAttitudeValidity)0x0800) +#define FITAttitudeValidityMagneticHeading ((FITAttitudeValidity)0x1000) +#define FITAttitudeValidityCount 13 + +typedef FITEnum FITAutoSyncFrequency; +#define FITAutoSyncFrequencyInvalid FITEnumInvalid +#define FITAutoSyncFrequencyNever ((FITAutoSyncFrequency)0) +#define FITAutoSyncFrequencyOccasionally ((FITAutoSyncFrequency)1) +#define FITAutoSyncFrequencyFrequent ((FITAutoSyncFrequency)2) +#define FITAutoSyncFrequencyOnceADay ((FITAutoSyncFrequency)3) +#define FITAutoSyncFrequencyRemote ((FITAutoSyncFrequency)4) +#define FITAutoSyncFrequencyCount 5 + +typedef FITEnum FITExdLayout; +#define FITExdLayoutInvalid FITEnumInvalid +#define FITExdLayoutFullScreen ((FITExdLayout)0) +#define FITExdLayoutHalfVertical ((FITExdLayout)1) +#define FITExdLayoutHalfHorizontal ((FITExdLayout)2) +#define FITExdLayoutHalfVerticalRightSplit ((FITExdLayout)3) +#define FITExdLayoutHalfHorizontalBottomSplit ((FITExdLayout)4) +#define FITExdLayoutFullQuarterSplit ((FITExdLayout)5) +#define FITExdLayoutHalfVerticalLeftSplit ((FITExdLayout)6) +#define FITExdLayoutHalfHorizontalTopSplit ((FITExdLayout)7) +#define FITExdLayoutDynamic ((FITExdLayout)8) // The EXD may display the configured concepts in any layout it sees fit. +#define FITExdLayoutCount 9 + +typedef FITEnum FITExdDisplayType; +#define FITExdDisplayTypeInvalid FITEnumInvalid +#define FITExdDisplayTypeNumerical ((FITExdDisplayType)0) +#define FITExdDisplayTypeSimple ((FITExdDisplayType)1) +#define FITExdDisplayTypeGraph ((FITExdDisplayType)2) +#define FITExdDisplayTypeBar ((FITExdDisplayType)3) +#define FITExdDisplayTypeCircleGraph ((FITExdDisplayType)4) +#define FITExdDisplayTypeVirtualPartner ((FITExdDisplayType)5) +#define FITExdDisplayTypeBalance ((FITExdDisplayType)6) +#define FITExdDisplayTypeStringList ((FITExdDisplayType)7) +#define FITExdDisplayTypeString ((FITExdDisplayType)8) +#define FITExdDisplayTypeSimpleDynamicIcon ((FITExdDisplayType)9) +#define FITExdDisplayTypeGauge ((FITExdDisplayType)10) +#define FITExdDisplayTypeCount 11 + +typedef FITEnum FITExdDataUnits; +#define FITExdDataUnitsInvalid FITEnumInvalid +#define FITExdDataUnitsNoUnits ((FITExdDataUnits)0) +#define FITExdDataUnitsLaps ((FITExdDataUnits)1) +#define FITExdDataUnitsMilesPerHour ((FITExdDataUnits)2) +#define FITExdDataUnitsKilometersPerHour ((FITExdDataUnits)3) +#define FITExdDataUnitsFeetPerHour ((FITExdDataUnits)4) +#define FITExdDataUnitsMetersPerHour ((FITExdDataUnits)5) +#define FITExdDataUnitsDegreesCelsius ((FITExdDataUnits)6) +#define FITExdDataUnitsDegreesFarenheit ((FITExdDataUnits)7) +#define FITExdDataUnitsZone ((FITExdDataUnits)8) +#define FITExdDataUnitsGear ((FITExdDataUnits)9) +#define FITExdDataUnitsRpm ((FITExdDataUnits)10) +#define FITExdDataUnitsBpm ((FITExdDataUnits)11) +#define FITExdDataUnitsDegrees ((FITExdDataUnits)12) +#define FITExdDataUnitsMillimeters ((FITExdDataUnits)13) +#define FITExdDataUnitsMeters ((FITExdDataUnits)14) +#define FITExdDataUnitsKilometers ((FITExdDataUnits)15) +#define FITExdDataUnitsFeet ((FITExdDataUnits)16) +#define FITExdDataUnitsYards ((FITExdDataUnits)17) +#define FITExdDataUnitsKilofeet ((FITExdDataUnits)18) +#define FITExdDataUnitsMiles ((FITExdDataUnits)19) +#define FITExdDataUnitsTime ((FITExdDataUnits)20) +#define FITExdDataUnitsEnumTurnType ((FITExdDataUnits)21) +#define FITExdDataUnitsPercent ((FITExdDataUnits)22) +#define FITExdDataUnitsWatts ((FITExdDataUnits)23) +#define FITExdDataUnitsWattsPerKilogram ((FITExdDataUnits)24) +#define FITExdDataUnitsEnumBatteryStatus ((FITExdDataUnits)25) +#define FITExdDataUnitsEnumBikeLightBeamAngleMode ((FITExdDataUnits)26) +#define FITExdDataUnitsEnumBikeLightBatteryStatus ((FITExdDataUnits)27) +#define FITExdDataUnitsEnumBikeLightNetworkConfigType ((FITExdDataUnits)28) +#define FITExdDataUnitsLights ((FITExdDataUnits)29) +#define FITExdDataUnitsSeconds ((FITExdDataUnits)30) +#define FITExdDataUnitsMinutes ((FITExdDataUnits)31) +#define FITExdDataUnitsHours ((FITExdDataUnits)32) +#define FITExdDataUnitsCalories ((FITExdDataUnits)33) +#define FITExdDataUnitsKilojoules ((FITExdDataUnits)34) +#define FITExdDataUnitsMilliseconds ((FITExdDataUnits)35) +#define FITExdDataUnitsSecondPerMile ((FITExdDataUnits)36) +#define FITExdDataUnitsSecondPerKilometer ((FITExdDataUnits)37) +#define FITExdDataUnitsCentimeter ((FITExdDataUnits)38) +#define FITExdDataUnitsEnumCoursePoint ((FITExdDataUnits)39) +#define FITExdDataUnitsBradians ((FITExdDataUnits)40) +#define FITExdDataUnitsEnumSport ((FITExdDataUnits)41) +#define FITExdDataUnitsInchesHg ((FITExdDataUnits)42) +#define FITExdDataUnitsMmHg ((FITExdDataUnits)43) +#define FITExdDataUnitsMbars ((FITExdDataUnits)44) +#define FITExdDataUnitsHectoPascals ((FITExdDataUnits)45) +#define FITExdDataUnitsFeetPerMin ((FITExdDataUnits)46) +#define FITExdDataUnitsMetersPerMin ((FITExdDataUnits)47) +#define FITExdDataUnitsMetersPerSec ((FITExdDataUnits)48) +#define FITExdDataUnitsEightCardinal ((FITExdDataUnits)49) +#define FITExdDataUnitsCount 50 + +typedef FITEnum FITExdQualifiers; +#define FITExdQualifiersInvalid FITEnumInvalid +#define FITExdQualifiersNoQualifier ((FITExdQualifiers)0) +#define FITExdQualifiersInstantaneous ((FITExdQualifiers)1) +#define FITExdQualifiersAverage ((FITExdQualifiers)2) +#define FITExdQualifiersLap ((FITExdQualifiers)3) +#define FITExdQualifiersMaximum ((FITExdQualifiers)4) +#define FITExdQualifiersMaximumAverage ((FITExdQualifiers)5) +#define FITExdQualifiersMaximumLap ((FITExdQualifiers)6) +#define FITExdQualifiersLastLap ((FITExdQualifiers)7) +#define FITExdQualifiersAverageLap ((FITExdQualifiers)8) +#define FITExdQualifiersToDestination ((FITExdQualifiers)9) +#define FITExdQualifiersToGo ((FITExdQualifiers)10) +#define FITExdQualifiersToNext ((FITExdQualifiers)11) +#define FITExdQualifiersNextCoursePoint ((FITExdQualifiers)12) +#define FITExdQualifiersTotal ((FITExdQualifiers)13) +#define FITExdQualifiersThreeSecondAverage ((FITExdQualifiers)14) +#define FITExdQualifiersTenSecondAverage ((FITExdQualifiers)15) +#define FITExdQualifiersThirtySecondAverage ((FITExdQualifiers)16) +#define FITExdQualifiersPercentMaximum ((FITExdQualifiers)17) +#define FITExdQualifiersPercentMaximumAverage ((FITExdQualifiers)18) +#define FITExdQualifiersLapPercentMaximum ((FITExdQualifiers)19) +#define FITExdQualifiersElapsed ((FITExdQualifiers)20) +#define FITExdQualifiersSunrise ((FITExdQualifiers)21) +#define FITExdQualifiersSunset ((FITExdQualifiers)22) +#define FITExdQualifiersComparedToVirtualPartner ((FITExdQualifiers)23) +#define FITExdQualifiersMaximum24h ((FITExdQualifiers)24) +#define FITExdQualifiersMinimum24h ((FITExdQualifiers)25) +#define FITExdQualifiersMinimum ((FITExdQualifiers)26) +#define FITExdQualifiersFirst ((FITExdQualifiers)27) +#define FITExdQualifiersSecond ((FITExdQualifiers)28) +#define FITExdQualifiersThird ((FITExdQualifiers)29) +#define FITExdQualifiersShifter ((FITExdQualifiers)30) +#define FITExdQualifiersLastSport ((FITExdQualifiers)31) +#define FITExdQualifiersMoving ((FITExdQualifiers)32) +#define FITExdQualifiersStopped ((FITExdQualifiers)33) +#define FITExdQualifiersEstimatedTotal ((FITExdQualifiers)34) +#define FITExdQualifiersZone9 ((FITExdQualifiers)242) +#define FITExdQualifiersZone8 ((FITExdQualifiers)243) +#define FITExdQualifiersZone7 ((FITExdQualifiers)244) +#define FITExdQualifiersZone6 ((FITExdQualifiers)245) +#define FITExdQualifiersZone5 ((FITExdQualifiers)246) +#define FITExdQualifiersZone4 ((FITExdQualifiers)247) +#define FITExdQualifiersZone3 ((FITExdQualifiers)248) +#define FITExdQualifiersZone2 ((FITExdQualifiers)249) +#define FITExdQualifiersZone1 ((FITExdQualifiers)250) +#define FITExdQualifiersCount 44 + +typedef FITEnum FITExdDescriptors; +#define FITExdDescriptorsInvalid FITEnumInvalid +#define FITExdDescriptorsBikeLightBatteryStatus ((FITExdDescriptors)0) +#define FITExdDescriptorsBeamAngleStatus ((FITExdDescriptors)1) +#define FITExdDescriptorsBateryLevel ((FITExdDescriptors)2) +#define FITExdDescriptorsLightNetworkMode ((FITExdDescriptors)3) +#define FITExdDescriptorsNumberLightsConnected ((FITExdDescriptors)4) +#define FITExdDescriptorsCadence ((FITExdDescriptors)5) +#define FITExdDescriptorsDistance ((FITExdDescriptors)6) +#define FITExdDescriptorsEstimatedTimeOfArrival ((FITExdDescriptors)7) +#define FITExdDescriptorsHeading ((FITExdDescriptors)8) +#define FITExdDescriptorsTime ((FITExdDescriptors)9) +#define FITExdDescriptorsBatteryLevel ((FITExdDescriptors)10) +#define FITExdDescriptorsTrainerResistance ((FITExdDescriptors)11) +#define FITExdDescriptorsTrainerTargetPower ((FITExdDescriptors)12) +#define FITExdDescriptorsTimeSeated ((FITExdDescriptors)13) +#define FITExdDescriptorsTimeStanding ((FITExdDescriptors)14) +#define FITExdDescriptorsElevation ((FITExdDescriptors)15) +#define FITExdDescriptorsGrade ((FITExdDescriptors)16) +#define FITExdDescriptorsAscent ((FITExdDescriptors)17) +#define FITExdDescriptorsDescent ((FITExdDescriptors)18) +#define FITExdDescriptorsVerticalSpeed ((FITExdDescriptors)19) +#define FITExdDescriptorsDi2BatteryLevel ((FITExdDescriptors)20) +#define FITExdDescriptorsFrontGear ((FITExdDescriptors)21) +#define FITExdDescriptorsRearGear ((FITExdDescriptors)22) +#define FITExdDescriptorsGearRatio ((FITExdDescriptors)23) +#define FITExdDescriptorsHeartRate ((FITExdDescriptors)24) +#define FITExdDescriptorsHeartRateZone ((FITExdDescriptors)25) +#define FITExdDescriptorsTimeInHeartRateZone ((FITExdDescriptors)26) +#define FITExdDescriptorsHeartRateReserve ((FITExdDescriptors)27) +#define FITExdDescriptorsCalories ((FITExdDescriptors)28) +#define FITExdDescriptorsGpsAccuracy ((FITExdDescriptors)29) +#define FITExdDescriptorsGpsSignalStrength ((FITExdDescriptors)30) +#define FITExdDescriptorsTemperature ((FITExdDescriptors)31) +#define FITExdDescriptorsTimeOfDay ((FITExdDescriptors)32) +#define FITExdDescriptorsBalance ((FITExdDescriptors)33) +#define FITExdDescriptorsPedalSmoothness ((FITExdDescriptors)34) +#define FITExdDescriptorsPower ((FITExdDescriptors)35) +#define FITExdDescriptorsFunctionalThresholdPower ((FITExdDescriptors)36) +#define FITExdDescriptorsIntensityFactor ((FITExdDescriptors)37) +#define FITExdDescriptorsWork ((FITExdDescriptors)38) +#define FITExdDescriptorsPowerRatio ((FITExdDescriptors)39) +#define FITExdDescriptorsNormalizedPower ((FITExdDescriptors)40) +#define FITExdDescriptorsTrainingStressScore ((FITExdDescriptors)41) +#define FITExdDescriptorsTimeOnZone ((FITExdDescriptors)42) +#define FITExdDescriptorsSpeed ((FITExdDescriptors)43) +#define FITExdDescriptorsLaps ((FITExdDescriptors)44) +#define FITExdDescriptorsReps ((FITExdDescriptors)45) +#define FITExdDescriptorsWorkoutStep ((FITExdDescriptors)46) +#define FITExdDescriptorsCourseDistance ((FITExdDescriptors)47) +#define FITExdDescriptorsNavigationDistance ((FITExdDescriptors)48) +#define FITExdDescriptorsCourseEstimatedTimeOfArrival ((FITExdDescriptors)49) +#define FITExdDescriptorsNavigationEstimatedTimeOfArrival ((FITExdDescriptors)50) +#define FITExdDescriptorsCourseTime ((FITExdDescriptors)51) +#define FITExdDescriptorsNavigationTime ((FITExdDescriptors)52) +#define FITExdDescriptorsCourseHeading ((FITExdDescriptors)53) +#define FITExdDescriptorsNavigationHeading ((FITExdDescriptors)54) +#define FITExdDescriptorsPowerZone ((FITExdDescriptors)55) +#define FITExdDescriptorsTorqueEffectiveness ((FITExdDescriptors)56) +#define FITExdDescriptorsTimerTime ((FITExdDescriptors)57) +#define FITExdDescriptorsPowerWeightRatio ((FITExdDescriptors)58) +#define FITExdDescriptorsLeftPlatformCenterOffset ((FITExdDescriptors)59) +#define FITExdDescriptorsRightPlatformCenterOffset ((FITExdDescriptors)60) +#define FITExdDescriptorsLeftPowerPhaseStartAngle ((FITExdDescriptors)61) +#define FITExdDescriptorsRightPowerPhaseStartAngle ((FITExdDescriptors)62) +#define FITExdDescriptorsLeftPowerPhaseFinishAngle ((FITExdDescriptors)63) +#define FITExdDescriptorsRightPowerPhaseFinishAngle ((FITExdDescriptors)64) +#define FITExdDescriptorsGears ((FITExdDescriptors)65) // Combined gear information +#define FITExdDescriptorsPace ((FITExdDescriptors)66) +#define FITExdDescriptorsTrainingEffect ((FITExdDescriptors)67) +#define FITExdDescriptorsVerticalOscillation ((FITExdDescriptors)68) +#define FITExdDescriptorsVerticalRatio ((FITExdDescriptors)69) +#define FITExdDescriptorsGroundContactTime ((FITExdDescriptors)70) +#define FITExdDescriptorsLeftGroundContactTimeBalance ((FITExdDescriptors)71) +#define FITExdDescriptorsRightGroundContactTimeBalance ((FITExdDescriptors)72) +#define FITExdDescriptorsStrideLength ((FITExdDescriptors)73) +#define FITExdDescriptorsRunningCadence ((FITExdDescriptors)74) +#define FITExdDescriptorsPerformanceCondition ((FITExdDescriptors)75) +#define FITExdDescriptorsCourseType ((FITExdDescriptors)76) +#define FITExdDescriptorsTimeInPowerZone ((FITExdDescriptors)77) +#define FITExdDescriptorsNavigationTurn ((FITExdDescriptors)78) +#define FITExdDescriptorsCourseLocation ((FITExdDescriptors)79) +#define FITExdDescriptorsNavigationLocation ((FITExdDescriptors)80) +#define FITExdDescriptorsCompass ((FITExdDescriptors)81) +#define FITExdDescriptorsGearCombo ((FITExdDescriptors)82) +#define FITExdDescriptorsMuscleOxygen ((FITExdDescriptors)83) +#define FITExdDescriptorsIcon ((FITExdDescriptors)84) +#define FITExdDescriptorsCompassHeading ((FITExdDescriptors)85) +#define FITExdDescriptorsGpsHeading ((FITExdDescriptors)86) +#define FITExdDescriptorsGpsElevation ((FITExdDescriptors)87) +#define FITExdDescriptorsAnaerobicTrainingEffect ((FITExdDescriptors)88) +#define FITExdDescriptorsCourse ((FITExdDescriptors)89) +#define FITExdDescriptorsOffCourse ((FITExdDescriptors)90) +#define FITExdDescriptorsGlideRatio ((FITExdDescriptors)91) +#define FITExdDescriptorsVerticalDistance ((FITExdDescriptors)92) +#define FITExdDescriptorsVmg ((FITExdDescriptors)93) +#define FITExdDescriptorsAmbientPressure ((FITExdDescriptors)94) +#define FITExdDescriptorsPressure ((FITExdDescriptors)95) +#define FITExdDescriptorsVam ((FITExdDescriptors)96) +#define FITExdDescriptorsCount 97 + +typedef FITUInt32 FITAutoActivityDetect; +#define FITAutoActivityDetectInvalid FITUInt32Invalid +#define FITAutoActivityDetectNone ((FITAutoActivityDetect)0x00000000) +#define FITAutoActivityDetectRunning ((FITAutoActivityDetect)0x00000001) +#define FITAutoActivityDetectCycling ((FITAutoActivityDetect)0x00000002) +#define FITAutoActivityDetectSwimming ((FITAutoActivityDetect)0x00000004) +#define FITAutoActivityDetectWalking ((FITAutoActivityDetect)0x00000008) +#define FITAutoActivityDetectElliptical ((FITAutoActivityDetect)0x00000020) +#define FITAutoActivityDetectSedentary ((FITAutoActivityDetect)0x00000400) +#define FITAutoActivityDetectCount 7 + +typedef FITUInt32z FITSupportedExdScreenLayouts; +#define FITSupportedExdScreenLayoutsInvalid FITUInt32zInvalid +#define FITSupportedExdScreenLayoutsFullScreen ((FITSupportedExdScreenLayouts)0x00000001) +#define FITSupportedExdScreenLayoutsHalfVertical ((FITSupportedExdScreenLayouts)0x00000002) +#define FITSupportedExdScreenLayoutsHalfHorizontal ((FITSupportedExdScreenLayouts)0x00000004) +#define FITSupportedExdScreenLayoutsHalfVerticalRightSplit ((FITSupportedExdScreenLayouts)0x00000008) +#define FITSupportedExdScreenLayoutsHalfHorizontalBottomSplit ((FITSupportedExdScreenLayouts)0x00000010) +#define FITSupportedExdScreenLayoutsFullQuarterSplit ((FITSupportedExdScreenLayouts)0x00000020) +#define FITSupportedExdScreenLayoutsHalfVerticalLeftSplit ((FITSupportedExdScreenLayouts)0x00000040) +#define FITSupportedExdScreenLayoutsHalfHorizontalTopSplit ((FITSupportedExdScreenLayouts)0x00000080) +#define FITSupportedExdScreenLayoutsCount 8 + +typedef FITUInt8 FITFitBaseType; +#define FITFitBaseTypeInvalid FITUInt8Invalid +#define FITFitBaseTypeEnum ((FITFitBaseType)0) +#define FITFitBaseTypeSint8 ((FITFitBaseType)1) +#define FITFitBaseTypeUint8 ((FITFitBaseType)2) +#define FITFitBaseTypeSint16 ((FITFitBaseType)131) +#define FITFitBaseTypeUint16 ((FITFitBaseType)132) +#define FITFitBaseTypeSint32 ((FITFitBaseType)133) +#define FITFitBaseTypeUint32 ((FITFitBaseType)134) +#define FITFitBaseTypeString ((FITFitBaseType)7) +#define FITFitBaseTypeFloat32 ((FITFitBaseType)136) +#define FITFitBaseTypeFloat64 ((FITFitBaseType)137) +#define FITFitBaseTypeUint8z ((FITFitBaseType)10) +#define FITFitBaseTypeUint16z ((FITFitBaseType)139) +#define FITFitBaseTypeUint32z ((FITFitBaseType)140) +#define FITFitBaseTypeByte ((FITFitBaseType)13) +#define FITFitBaseTypeSint64 ((FITFitBaseType)142) +#define FITFitBaseTypeUint64 ((FITFitBaseType)143) +#define FITFitBaseTypeUint64z ((FITFitBaseType)144) +#define FITFitBaseTypeCount 17 + +typedef FITEnum FITTurnType; +#define FITTurnTypeInvalid FITEnumInvalid +#define FITTurnTypeArrivingIdx ((FITTurnType)0) +#define FITTurnTypeArrivingLeftIdx ((FITTurnType)1) +#define FITTurnTypeArrivingRightIdx ((FITTurnType)2) +#define FITTurnTypeArrivingViaIdx ((FITTurnType)3) +#define FITTurnTypeArrivingViaLeftIdx ((FITTurnType)4) +#define FITTurnTypeArrivingViaRightIdx ((FITTurnType)5) +#define FITTurnTypeBearKeepLeftIdx ((FITTurnType)6) +#define FITTurnTypeBearKeepRightIdx ((FITTurnType)7) +#define FITTurnTypeContinueIdx ((FITTurnType)8) +#define FITTurnTypeExitLeftIdx ((FITTurnType)9) +#define FITTurnTypeExitRightIdx ((FITTurnType)10) +#define FITTurnTypeFerryIdx ((FITTurnType)11) +#define FITTurnTypeRoundabout45Idx ((FITTurnType)12) +#define FITTurnTypeRoundabout90Idx ((FITTurnType)13) +#define FITTurnTypeRoundabout135Idx ((FITTurnType)14) +#define FITTurnTypeRoundabout180Idx ((FITTurnType)15) +#define FITTurnTypeRoundabout225Idx ((FITTurnType)16) +#define FITTurnTypeRoundabout270Idx ((FITTurnType)17) +#define FITTurnTypeRoundabout315Idx ((FITTurnType)18) +#define FITTurnTypeRoundabout360Idx ((FITTurnType)19) +#define FITTurnTypeRoundaboutNeg45Idx ((FITTurnType)20) +#define FITTurnTypeRoundaboutNeg90Idx ((FITTurnType)21) +#define FITTurnTypeRoundaboutNeg135Idx ((FITTurnType)22) +#define FITTurnTypeRoundaboutNeg180Idx ((FITTurnType)23) +#define FITTurnTypeRoundaboutNeg225Idx ((FITTurnType)24) +#define FITTurnTypeRoundaboutNeg270Idx ((FITTurnType)25) +#define FITTurnTypeRoundaboutNeg315Idx ((FITTurnType)26) +#define FITTurnTypeRoundaboutNeg360Idx ((FITTurnType)27) +#define FITTurnTypeRoundaboutGenericIdx ((FITTurnType)28) +#define FITTurnTypeRoundaboutNegGenericIdx ((FITTurnType)29) +#define FITTurnTypeSharpTurnLeftIdx ((FITTurnType)30) +#define FITTurnTypeSharpTurnRightIdx ((FITTurnType)31) +#define FITTurnTypeTurnLeftIdx ((FITTurnType)32) +#define FITTurnTypeTurnRightIdx ((FITTurnType)33) +#define FITTurnTypeUturnLeftIdx ((FITTurnType)34) +#define FITTurnTypeUturnRightIdx ((FITTurnType)35) +#define FITTurnTypeIconInvIdx ((FITTurnType)36) +#define FITTurnTypeIconIdxCnt ((FITTurnType)37) +#define FITTurnTypeCount 38 + +typedef FITUInt8 FITBikeLightBeamAngleMode; +#define FITBikeLightBeamAngleModeInvalid FITUInt8Invalid +#define FITBikeLightBeamAngleModeManual ((FITBikeLightBeamAngleMode)0) +#define FITBikeLightBeamAngleModeAuto ((FITBikeLightBeamAngleMode)1) +#define FITBikeLightBeamAngleModeCount 2 + +typedef FITUInt16 FITFitBaseUnit; +#define FITFitBaseUnitInvalid FITUInt16Invalid +#define FITFitBaseUnitOther ((FITFitBaseUnit)0) +#define FITFitBaseUnitKilogram ((FITFitBaseUnit)1) +#define FITFitBaseUnitPound ((FITFitBaseUnit)2) +#define FITFitBaseUnitCount 3 + +typedef FITUInt8 FITSetType; +#define FITSetTypeInvalid FITUInt8Invalid +#define FITSetTypeRest ((FITSetType)0) +#define FITSetTypeActive ((FITSetType)1) +#define FITSetTypeCount 2 + +typedef FITUInt16 FITExerciseCategory; +#define FITExerciseCategoryInvalid FITUInt16Invalid +#define FITExerciseCategoryBenchPress ((FITExerciseCategory)0) +#define FITExerciseCategoryCalfRaise ((FITExerciseCategory)1) +#define FITExerciseCategoryCardio ((FITExerciseCategory)2) +#define FITExerciseCategoryCarry ((FITExerciseCategory)3) +#define FITExerciseCategoryChop ((FITExerciseCategory)4) +#define FITExerciseCategoryCore ((FITExerciseCategory)5) +#define FITExerciseCategoryCrunch ((FITExerciseCategory)6) +#define FITExerciseCategoryCurl ((FITExerciseCategory)7) +#define FITExerciseCategoryDeadlift ((FITExerciseCategory)8) +#define FITExerciseCategoryFlye ((FITExerciseCategory)9) +#define FITExerciseCategoryHipRaise ((FITExerciseCategory)10) +#define FITExerciseCategoryHipStability ((FITExerciseCategory)11) +#define FITExerciseCategoryHipSwing ((FITExerciseCategory)12) +#define FITExerciseCategoryHyperextension ((FITExerciseCategory)13) +#define FITExerciseCategoryLateralRaise ((FITExerciseCategory)14) +#define FITExerciseCategoryLegCurl ((FITExerciseCategory)15) +#define FITExerciseCategoryLegRaise ((FITExerciseCategory)16) +#define FITExerciseCategoryLunge ((FITExerciseCategory)17) +#define FITExerciseCategoryOlympicLift ((FITExerciseCategory)18) +#define FITExerciseCategoryPlank ((FITExerciseCategory)19) +#define FITExerciseCategoryPlyo ((FITExerciseCategory)20) +#define FITExerciseCategoryPullUp ((FITExerciseCategory)21) +#define FITExerciseCategoryPushUp ((FITExerciseCategory)22) +#define FITExerciseCategoryRow ((FITExerciseCategory)23) +#define FITExerciseCategoryShoulderPress ((FITExerciseCategory)24) +#define FITExerciseCategoryShoulderStability ((FITExerciseCategory)25) +#define FITExerciseCategoryShrug ((FITExerciseCategory)26) +#define FITExerciseCategorySitUp ((FITExerciseCategory)27) +#define FITExerciseCategorySquat ((FITExerciseCategory)28) +#define FITExerciseCategoryTotalBody ((FITExerciseCategory)29) +#define FITExerciseCategoryTricepsExtension ((FITExerciseCategory)30) +#define FITExerciseCategoryWarmUp ((FITExerciseCategory)31) +#define FITExerciseCategoryRun ((FITExerciseCategory)32) +#define FITExerciseCategoryUnknown ((FITExerciseCategory)65534) +#define FITExerciseCategoryCount 34 + +typedef FITUInt16 FITBenchPressExerciseName; +#define FITBenchPressExerciseNameInvalid FITUInt16Invalid +#define FITBenchPressExerciseNameAlternatingDumbbellChestPressOnSwissBall ((FITBenchPressExerciseName)0) +#define FITBenchPressExerciseNameBarbellBenchPress ((FITBenchPressExerciseName)1) +#define FITBenchPressExerciseNameBarbellBoardBenchPress ((FITBenchPressExerciseName)2) +#define FITBenchPressExerciseNameBarbellFloorPress ((FITBenchPressExerciseName)3) +#define FITBenchPressExerciseNameCloseGripBarbellBenchPress ((FITBenchPressExerciseName)4) +#define FITBenchPressExerciseNameDeclineDumbbellBenchPress ((FITBenchPressExerciseName)5) +#define FITBenchPressExerciseNameDumbbellBenchPress ((FITBenchPressExerciseName)6) +#define FITBenchPressExerciseNameDumbbellFloorPress ((FITBenchPressExerciseName)7) +#define FITBenchPressExerciseNameInclineBarbellBenchPress ((FITBenchPressExerciseName)8) +#define FITBenchPressExerciseNameInclineDumbbellBenchPress ((FITBenchPressExerciseName)9) +#define FITBenchPressExerciseNameInclineSmithMachineBenchPress ((FITBenchPressExerciseName)10) +#define FITBenchPressExerciseNameIsometricBarbellBenchPress ((FITBenchPressExerciseName)11) +#define FITBenchPressExerciseNameKettlebellChestPress ((FITBenchPressExerciseName)12) +#define FITBenchPressExerciseNameNeutralGripDumbbellBenchPress ((FITBenchPressExerciseName)13) +#define FITBenchPressExerciseNameNeutralGripDumbbellInclineBenchPress ((FITBenchPressExerciseName)14) +#define FITBenchPressExerciseNameOneArmFloorPress ((FITBenchPressExerciseName)15) +#define FITBenchPressExerciseNameWeightedOneArmFloorPress ((FITBenchPressExerciseName)16) +#define FITBenchPressExerciseNamePartialLockout ((FITBenchPressExerciseName)17) +#define FITBenchPressExerciseNameReverseGripBarbellBenchPress ((FITBenchPressExerciseName)18) +#define FITBenchPressExerciseNameReverseGripInclineBenchPress ((FITBenchPressExerciseName)19) +#define FITBenchPressExerciseNameSingleArmCableChestPress ((FITBenchPressExerciseName)20) +#define FITBenchPressExerciseNameSingleArmDumbbellBenchPress ((FITBenchPressExerciseName)21) +#define FITBenchPressExerciseNameSmithMachineBenchPress ((FITBenchPressExerciseName)22) +#define FITBenchPressExerciseNameSwissBallDumbbellChestPress ((FITBenchPressExerciseName)23) +#define FITBenchPressExerciseNameTripleStopBarbellBenchPress ((FITBenchPressExerciseName)24) +#define FITBenchPressExerciseNameWideGripBarbellBenchPress ((FITBenchPressExerciseName)25) +#define FITBenchPressExerciseNameAlternatingDumbbellChestPress ((FITBenchPressExerciseName)26) +#define FITBenchPressExerciseNameCount 27 + +typedef FITUInt16 FITCalfRaiseExerciseName; +#define FITCalfRaiseExerciseNameInvalid FITUInt16Invalid +#define FITCalfRaiseExerciseName3WayCalfRaise ((FITCalfRaiseExerciseName)0) +#define FITCalfRaiseExerciseName3WayWeightedCalfRaise ((FITCalfRaiseExerciseName)1) +#define FITCalfRaiseExerciseName3WaySingleLegCalfRaise ((FITCalfRaiseExerciseName)2) +#define FITCalfRaiseExerciseName3WayWeightedSingleLegCalfRaise ((FITCalfRaiseExerciseName)3) +#define FITCalfRaiseExerciseNameDonkeyCalfRaise ((FITCalfRaiseExerciseName)4) +#define FITCalfRaiseExerciseNameWeightedDonkeyCalfRaise ((FITCalfRaiseExerciseName)5) +#define FITCalfRaiseExerciseNameSeatedCalfRaise ((FITCalfRaiseExerciseName)6) +#define FITCalfRaiseExerciseNameWeightedSeatedCalfRaise ((FITCalfRaiseExerciseName)7) +#define FITCalfRaiseExerciseNameSeatedDumbbellToeRaise ((FITCalfRaiseExerciseName)8) +#define FITCalfRaiseExerciseNameSingleLegBentKneeCalfRaise ((FITCalfRaiseExerciseName)9) +#define FITCalfRaiseExerciseNameWeightedSingleLegBentKneeCalfRaise ((FITCalfRaiseExerciseName)10) +#define FITCalfRaiseExerciseNameSingleLegDeclinePushUp ((FITCalfRaiseExerciseName)11) +#define FITCalfRaiseExerciseNameSingleLegDonkeyCalfRaise ((FITCalfRaiseExerciseName)12) +#define FITCalfRaiseExerciseNameWeightedSingleLegDonkeyCalfRaise ((FITCalfRaiseExerciseName)13) +#define FITCalfRaiseExerciseNameSingleLegHipRaiseWithKneeHold ((FITCalfRaiseExerciseName)14) +#define FITCalfRaiseExerciseNameSingleLegStandingCalfRaise ((FITCalfRaiseExerciseName)15) +#define FITCalfRaiseExerciseNameSingleLegStandingDumbbellCalfRaise ((FITCalfRaiseExerciseName)16) +#define FITCalfRaiseExerciseNameStandingBarbellCalfRaise ((FITCalfRaiseExerciseName)17) +#define FITCalfRaiseExerciseNameStandingCalfRaise ((FITCalfRaiseExerciseName)18) +#define FITCalfRaiseExerciseNameWeightedStandingCalfRaise ((FITCalfRaiseExerciseName)19) +#define FITCalfRaiseExerciseNameStandingDumbbellCalfRaise ((FITCalfRaiseExerciseName)20) +#define FITCalfRaiseExerciseNameCount 21 + +typedef FITUInt16 FITCardioExerciseName; +#define FITCardioExerciseNameInvalid FITUInt16Invalid +#define FITCardioExerciseNameBobAndWeaveCircle ((FITCardioExerciseName)0) +#define FITCardioExerciseNameWeightedBobAndWeaveCircle ((FITCardioExerciseName)1) +#define FITCardioExerciseNameCardioCoreCrawl ((FITCardioExerciseName)2) +#define FITCardioExerciseNameWeightedCardioCoreCrawl ((FITCardioExerciseName)3) +#define FITCardioExerciseNameDoubleUnder ((FITCardioExerciseName)4) +#define FITCardioExerciseNameWeightedDoubleUnder ((FITCardioExerciseName)5) +#define FITCardioExerciseNameJumpRope ((FITCardioExerciseName)6) +#define FITCardioExerciseNameWeightedJumpRope ((FITCardioExerciseName)7) +#define FITCardioExerciseNameJumpRopeCrossover ((FITCardioExerciseName)8) +#define FITCardioExerciseNameWeightedJumpRopeCrossover ((FITCardioExerciseName)9) +#define FITCardioExerciseNameJumpRopeJog ((FITCardioExerciseName)10) +#define FITCardioExerciseNameWeightedJumpRopeJog ((FITCardioExerciseName)11) +#define FITCardioExerciseNameJumpingJacks ((FITCardioExerciseName)12) +#define FITCardioExerciseNameWeightedJumpingJacks ((FITCardioExerciseName)13) +#define FITCardioExerciseNameSkiMoguls ((FITCardioExerciseName)14) +#define FITCardioExerciseNameWeightedSkiMoguls ((FITCardioExerciseName)15) +#define FITCardioExerciseNameSplitJacks ((FITCardioExerciseName)16) +#define FITCardioExerciseNameWeightedSplitJacks ((FITCardioExerciseName)17) +#define FITCardioExerciseNameSquatJacks ((FITCardioExerciseName)18) +#define FITCardioExerciseNameWeightedSquatJacks ((FITCardioExerciseName)19) +#define FITCardioExerciseNameTripleUnder ((FITCardioExerciseName)20) +#define FITCardioExerciseNameWeightedTripleUnder ((FITCardioExerciseName)21) +#define FITCardioExerciseNameCount 22 + +typedef FITUInt16 FITCarryExerciseName; +#define FITCarryExerciseNameInvalid FITUInt16Invalid +#define FITCarryExerciseNameBarHolds ((FITCarryExerciseName)0) +#define FITCarryExerciseNameFarmersWalk ((FITCarryExerciseName)1) +#define FITCarryExerciseNameFarmersWalkOnToes ((FITCarryExerciseName)2) +#define FITCarryExerciseNameHexDumbbellHold ((FITCarryExerciseName)3) +#define FITCarryExerciseNameOverheadCarry ((FITCarryExerciseName)4) +#define FITCarryExerciseNameCount 5 + +typedef FITUInt16 FITChopExerciseName; +#define FITChopExerciseNameInvalid FITUInt16Invalid +#define FITChopExerciseNameCablePullThrough ((FITChopExerciseName)0) +#define FITChopExerciseNameCableRotationalLift ((FITChopExerciseName)1) +#define FITChopExerciseNameCableWoodchop ((FITChopExerciseName)2) +#define FITChopExerciseNameCrossChopToKnee ((FITChopExerciseName)3) +#define FITChopExerciseNameWeightedCrossChopToKnee ((FITChopExerciseName)4) +#define FITChopExerciseNameDumbbellChop ((FITChopExerciseName)5) +#define FITChopExerciseNameHalfKneelingRotation ((FITChopExerciseName)6) +#define FITChopExerciseNameWeightedHalfKneelingRotation ((FITChopExerciseName)7) +#define FITChopExerciseNameHalfKneelingRotationalChop ((FITChopExerciseName)8) +#define FITChopExerciseNameHalfKneelingRotationalReverseChop ((FITChopExerciseName)9) +#define FITChopExerciseNameHalfKneelingStabilityChop ((FITChopExerciseName)10) +#define FITChopExerciseNameHalfKneelingStabilityReverseChop ((FITChopExerciseName)11) +#define FITChopExerciseNameKneelingRotationalChop ((FITChopExerciseName)12) +#define FITChopExerciseNameKneelingRotationalReverseChop ((FITChopExerciseName)13) +#define FITChopExerciseNameKneelingStabilityChop ((FITChopExerciseName)14) +#define FITChopExerciseNameKneelingWoodchopper ((FITChopExerciseName)15) +#define FITChopExerciseNameMedicineBallWoodChops ((FITChopExerciseName)16) +#define FITChopExerciseNamePowerSquatChops ((FITChopExerciseName)17) +#define FITChopExerciseNameWeightedPowerSquatChops ((FITChopExerciseName)18) +#define FITChopExerciseNameStandingRotationalChop ((FITChopExerciseName)19) +#define FITChopExerciseNameStandingSplitRotationalChop ((FITChopExerciseName)20) +#define FITChopExerciseNameStandingSplitRotationalReverseChop ((FITChopExerciseName)21) +#define FITChopExerciseNameStandingStabilityReverseChop ((FITChopExerciseName)22) +#define FITChopExerciseNameCount 23 + +typedef FITUInt16 FITCoreExerciseName; +#define FITCoreExerciseNameInvalid FITUInt16Invalid +#define FITCoreExerciseNameAbsJabs ((FITCoreExerciseName)0) +#define FITCoreExerciseNameWeightedAbsJabs ((FITCoreExerciseName)1) +#define FITCoreExerciseNameAlternatingPlateReach ((FITCoreExerciseName)2) +#define FITCoreExerciseNameBarbellRollout ((FITCoreExerciseName)3) +#define FITCoreExerciseNameWeightedBarbellRollout ((FITCoreExerciseName)4) +#define FITCoreExerciseNameBodyBarObliqueTwist ((FITCoreExerciseName)5) +#define FITCoreExerciseNameCableCorePress ((FITCoreExerciseName)6) +#define FITCoreExerciseNameCableSideBend ((FITCoreExerciseName)7) +#define FITCoreExerciseNameSideBend ((FITCoreExerciseName)8) +#define FITCoreExerciseNameWeightedSideBend ((FITCoreExerciseName)9) +#define FITCoreExerciseNameCrescentCircle ((FITCoreExerciseName)10) +#define FITCoreExerciseNameWeightedCrescentCircle ((FITCoreExerciseName)11) +#define FITCoreExerciseNameCyclingRussianTwist ((FITCoreExerciseName)12) +#define FITCoreExerciseNameWeightedCyclingRussianTwist ((FITCoreExerciseName)13) +#define FITCoreExerciseNameElevatedFeetRussianTwist ((FITCoreExerciseName)14) +#define FITCoreExerciseNameWeightedElevatedFeetRussianTwist ((FITCoreExerciseName)15) +#define FITCoreExerciseNameHalfTurkishGetUp ((FITCoreExerciseName)16) +#define FITCoreExerciseNameKettlebellWindmill ((FITCoreExerciseName)17) +#define FITCoreExerciseNameKneelingAbWheel ((FITCoreExerciseName)18) +#define FITCoreExerciseNameWeightedKneelingAbWheel ((FITCoreExerciseName)19) +#define FITCoreExerciseNameModifiedFrontLever ((FITCoreExerciseName)20) +#define FITCoreExerciseNameOpenKneeTucks ((FITCoreExerciseName)21) +#define FITCoreExerciseNameWeightedOpenKneeTucks ((FITCoreExerciseName)22) +#define FITCoreExerciseNameSideAbsLegLift ((FITCoreExerciseName)23) +#define FITCoreExerciseNameWeightedSideAbsLegLift ((FITCoreExerciseName)24) +#define FITCoreExerciseNameSwissBallJackknife ((FITCoreExerciseName)25) +#define FITCoreExerciseNameWeightedSwissBallJackknife ((FITCoreExerciseName)26) +#define FITCoreExerciseNameSwissBallPike ((FITCoreExerciseName)27) +#define FITCoreExerciseNameWeightedSwissBallPike ((FITCoreExerciseName)28) +#define FITCoreExerciseNameSwissBallRollout ((FITCoreExerciseName)29) +#define FITCoreExerciseNameWeightedSwissBallRollout ((FITCoreExerciseName)30) +#define FITCoreExerciseNameTriangleHipPress ((FITCoreExerciseName)31) +#define FITCoreExerciseNameWeightedTriangleHipPress ((FITCoreExerciseName)32) +#define FITCoreExerciseNameTrxSuspendedJackknife ((FITCoreExerciseName)33) +#define FITCoreExerciseNameWeightedTrxSuspendedJackknife ((FITCoreExerciseName)34) +#define FITCoreExerciseNameUBoat ((FITCoreExerciseName)35) +#define FITCoreExerciseNameWeightedUBoat ((FITCoreExerciseName)36) +#define FITCoreExerciseNameWindmillSwitches ((FITCoreExerciseName)37) +#define FITCoreExerciseNameWeightedWindmillSwitches ((FITCoreExerciseName)38) +#define FITCoreExerciseNameAlternatingSlideOut ((FITCoreExerciseName)39) +#define FITCoreExerciseNameWeightedAlternatingSlideOut ((FITCoreExerciseName)40) +#define FITCoreExerciseNameGhdBackExtensions ((FITCoreExerciseName)41) +#define FITCoreExerciseNameWeightedGhdBackExtensions ((FITCoreExerciseName)42) +#define FITCoreExerciseNameOverheadWalk ((FITCoreExerciseName)43) +#define FITCoreExerciseNameInchworm ((FITCoreExerciseName)44) +#define FITCoreExerciseNameWeightedModifiedFrontLever ((FITCoreExerciseName)45) +#define FITCoreExerciseNameRussianTwist ((FITCoreExerciseName)46) +#define FITCoreExerciseNameAbdominalLegRotations ((FITCoreExerciseName)47) // Deprecated do not use +#define FITCoreExerciseNameArmAndLegExtensionOnKnees ((FITCoreExerciseName)48) +#define FITCoreExerciseNameBicycle ((FITCoreExerciseName)49) +#define FITCoreExerciseNameBicepCurlWithLegExtension ((FITCoreExerciseName)50) +#define FITCoreExerciseNameCatCow ((FITCoreExerciseName)51) +#define FITCoreExerciseNameCorkscrew ((FITCoreExerciseName)52) +#define FITCoreExerciseNameCrissCross ((FITCoreExerciseName)53) +#define FITCoreExerciseNameCrissCrossWithBall ((FITCoreExerciseName)54) // Deprecated do not use +#define FITCoreExerciseNameDoubleLegStretch ((FITCoreExerciseName)55) +#define FITCoreExerciseNameKneeFolds ((FITCoreExerciseName)56) +#define FITCoreExerciseNameLowerLift ((FITCoreExerciseName)57) +#define FITCoreExerciseNameNeckPull ((FITCoreExerciseName)58) +#define FITCoreExerciseNamePelvicClocks ((FITCoreExerciseName)59) +#define FITCoreExerciseNameRollOver ((FITCoreExerciseName)60) +#define FITCoreExerciseNameRollUp ((FITCoreExerciseName)61) +#define FITCoreExerciseNameRolling ((FITCoreExerciseName)62) +#define FITCoreExerciseNameRowing1 ((FITCoreExerciseName)63) +#define FITCoreExerciseNameRowing2 ((FITCoreExerciseName)64) +#define FITCoreExerciseNameScissors ((FITCoreExerciseName)65) +#define FITCoreExerciseNameSingleLegCircles ((FITCoreExerciseName)66) +#define FITCoreExerciseNameSingleLegStretch ((FITCoreExerciseName)67) +#define FITCoreExerciseNameSnakeTwist1And2 ((FITCoreExerciseName)68) // Deprecated do not use +#define FITCoreExerciseNameSwan ((FITCoreExerciseName)69) +#define FITCoreExerciseNameSwimming ((FITCoreExerciseName)70) +#define FITCoreExerciseNameTeaser ((FITCoreExerciseName)71) +#define FITCoreExerciseNameTheHundred ((FITCoreExerciseName)72) +#define FITCoreExerciseNameCount 73 + +typedef FITUInt16 FITCrunchExerciseName; +#define FITCrunchExerciseNameInvalid FITUInt16Invalid +#define FITCrunchExerciseNameBicycleCrunch ((FITCrunchExerciseName)0) +#define FITCrunchExerciseNameCableCrunch ((FITCrunchExerciseName)1) +#define FITCrunchExerciseNameCircularArmCrunch ((FITCrunchExerciseName)2) +#define FITCrunchExerciseNameCrossedArmsCrunch ((FITCrunchExerciseName)3) +#define FITCrunchExerciseNameWeightedCrossedArmsCrunch ((FITCrunchExerciseName)4) +#define FITCrunchExerciseNameCrossLegReverseCrunch ((FITCrunchExerciseName)5) +#define FITCrunchExerciseNameWeightedCrossLegReverseCrunch ((FITCrunchExerciseName)6) +#define FITCrunchExerciseNameCrunchChop ((FITCrunchExerciseName)7) +#define FITCrunchExerciseNameWeightedCrunchChop ((FITCrunchExerciseName)8) +#define FITCrunchExerciseNameDoubleCrunch ((FITCrunchExerciseName)9) +#define FITCrunchExerciseNameWeightedDoubleCrunch ((FITCrunchExerciseName)10) +#define FITCrunchExerciseNameElbowToKneeCrunch ((FITCrunchExerciseName)11) +#define FITCrunchExerciseNameWeightedElbowToKneeCrunch ((FITCrunchExerciseName)12) +#define FITCrunchExerciseNameFlutterKicks ((FITCrunchExerciseName)13) +#define FITCrunchExerciseNameWeightedFlutterKicks ((FITCrunchExerciseName)14) +#define FITCrunchExerciseNameFoamRollerReverseCrunchOnBench ((FITCrunchExerciseName)15) +#define FITCrunchExerciseNameWeightedFoamRollerReverseCrunchOnBench ((FITCrunchExerciseName)16) +#define FITCrunchExerciseNameFoamRollerReverseCrunchWithDumbbell ((FITCrunchExerciseName)17) +#define FITCrunchExerciseNameFoamRollerReverseCrunchWithMedicineBall ((FITCrunchExerciseName)18) +#define FITCrunchExerciseNameFrogPress ((FITCrunchExerciseName)19) +#define FITCrunchExerciseNameHangingKneeRaiseObliqueCrunch ((FITCrunchExerciseName)20) +#define FITCrunchExerciseNameWeightedHangingKneeRaiseObliqueCrunch ((FITCrunchExerciseName)21) +#define FITCrunchExerciseNameHipCrossover ((FITCrunchExerciseName)22) +#define FITCrunchExerciseNameWeightedHipCrossover ((FITCrunchExerciseName)23) +#define FITCrunchExerciseNameHollowRock ((FITCrunchExerciseName)24) +#define FITCrunchExerciseNameWeightedHollowRock ((FITCrunchExerciseName)25) +#define FITCrunchExerciseNameInclineReverseCrunch ((FITCrunchExerciseName)26) +#define FITCrunchExerciseNameWeightedInclineReverseCrunch ((FITCrunchExerciseName)27) +#define FITCrunchExerciseNameKneelingCableCrunch ((FITCrunchExerciseName)28) +#define FITCrunchExerciseNameKneelingCrossCrunch ((FITCrunchExerciseName)29) +#define FITCrunchExerciseNameWeightedKneelingCrossCrunch ((FITCrunchExerciseName)30) +#define FITCrunchExerciseNameKneelingObliqueCableCrunch ((FITCrunchExerciseName)31) +#define FITCrunchExerciseNameKneesToElbow ((FITCrunchExerciseName)32) +#define FITCrunchExerciseNameLegExtensions ((FITCrunchExerciseName)33) +#define FITCrunchExerciseNameWeightedLegExtensions ((FITCrunchExerciseName)34) +#define FITCrunchExerciseNameLegLevers ((FITCrunchExerciseName)35) +#define FITCrunchExerciseNameMcgillCurlUp ((FITCrunchExerciseName)36) +#define FITCrunchExerciseNameWeightedMcgillCurlUp ((FITCrunchExerciseName)37) +#define FITCrunchExerciseNameModifiedPilatesRollUpWithBall ((FITCrunchExerciseName)38) +#define FITCrunchExerciseNameWeightedModifiedPilatesRollUpWithBall ((FITCrunchExerciseName)39) +#define FITCrunchExerciseNamePilatesCrunch ((FITCrunchExerciseName)40) +#define FITCrunchExerciseNameWeightedPilatesCrunch ((FITCrunchExerciseName)41) +#define FITCrunchExerciseNamePilatesRollUpWithBall ((FITCrunchExerciseName)42) +#define FITCrunchExerciseNameWeightedPilatesRollUpWithBall ((FITCrunchExerciseName)43) +#define FITCrunchExerciseNameRaisedLegsCrunch ((FITCrunchExerciseName)44) +#define FITCrunchExerciseNameWeightedRaisedLegsCrunch ((FITCrunchExerciseName)45) +#define FITCrunchExerciseNameReverseCrunch ((FITCrunchExerciseName)46) +#define FITCrunchExerciseNameWeightedReverseCrunch ((FITCrunchExerciseName)47) +#define FITCrunchExerciseNameReverseCrunchOnABench ((FITCrunchExerciseName)48) +#define FITCrunchExerciseNameWeightedReverseCrunchOnABench ((FITCrunchExerciseName)49) +#define FITCrunchExerciseNameReverseCurlAndLift ((FITCrunchExerciseName)50) +#define FITCrunchExerciseNameWeightedReverseCurlAndLift ((FITCrunchExerciseName)51) +#define FITCrunchExerciseNameRotationalLift ((FITCrunchExerciseName)52) +#define FITCrunchExerciseNameWeightedRotationalLift ((FITCrunchExerciseName)53) +#define FITCrunchExerciseNameSeatedAlternatingReverseCrunch ((FITCrunchExerciseName)54) +#define FITCrunchExerciseNameWeightedSeatedAlternatingReverseCrunch ((FITCrunchExerciseName)55) +#define FITCrunchExerciseNameSeatedLegU ((FITCrunchExerciseName)56) +#define FITCrunchExerciseNameWeightedSeatedLegU ((FITCrunchExerciseName)57) +#define FITCrunchExerciseNameSideToSideCrunchAndWeave ((FITCrunchExerciseName)58) +#define FITCrunchExerciseNameWeightedSideToSideCrunchAndWeave ((FITCrunchExerciseName)59) +#define FITCrunchExerciseNameSingleLegReverseCrunch ((FITCrunchExerciseName)60) +#define FITCrunchExerciseNameWeightedSingleLegReverseCrunch ((FITCrunchExerciseName)61) +#define FITCrunchExerciseNameSkaterCrunchCross ((FITCrunchExerciseName)62) +#define FITCrunchExerciseNameWeightedSkaterCrunchCross ((FITCrunchExerciseName)63) +#define FITCrunchExerciseNameStandingCableCrunch ((FITCrunchExerciseName)64) +#define FITCrunchExerciseNameStandingSideCrunch ((FITCrunchExerciseName)65) +#define FITCrunchExerciseNameStepClimb ((FITCrunchExerciseName)66) +#define FITCrunchExerciseNameWeightedStepClimb ((FITCrunchExerciseName)67) +#define FITCrunchExerciseNameSwissBallCrunch ((FITCrunchExerciseName)68) +#define FITCrunchExerciseNameSwissBallReverseCrunch ((FITCrunchExerciseName)69) +#define FITCrunchExerciseNameWeightedSwissBallReverseCrunch ((FITCrunchExerciseName)70) +#define FITCrunchExerciseNameSwissBallRussianTwist ((FITCrunchExerciseName)71) +#define FITCrunchExerciseNameWeightedSwissBallRussianTwist ((FITCrunchExerciseName)72) +#define FITCrunchExerciseNameSwissBallSideCrunch ((FITCrunchExerciseName)73) +#define FITCrunchExerciseNameWeightedSwissBallSideCrunch ((FITCrunchExerciseName)74) +#define FITCrunchExerciseNameThoracicCrunchesOnFoamRoller ((FITCrunchExerciseName)75) +#define FITCrunchExerciseNameWeightedThoracicCrunchesOnFoamRoller ((FITCrunchExerciseName)76) +#define FITCrunchExerciseNameTricepsCrunch ((FITCrunchExerciseName)77) +#define FITCrunchExerciseNameWeightedBicycleCrunch ((FITCrunchExerciseName)78) +#define FITCrunchExerciseNameWeightedCrunch ((FITCrunchExerciseName)79) +#define FITCrunchExerciseNameWeightedSwissBallCrunch ((FITCrunchExerciseName)80) +#define FITCrunchExerciseNameToesToBar ((FITCrunchExerciseName)81) +#define FITCrunchExerciseNameWeightedToesToBar ((FITCrunchExerciseName)82) +#define FITCrunchExerciseNameCrunch ((FITCrunchExerciseName)83) +#define FITCrunchExerciseNameStraightLegCrunchWithBall ((FITCrunchExerciseName)84) +#define FITCrunchExerciseNameCount 85 + +typedef FITUInt16 FITCurlExerciseName; +#define FITCurlExerciseNameInvalid FITUInt16Invalid +#define FITCurlExerciseNameAlternatingDumbbellBicepsCurl ((FITCurlExerciseName)0) +#define FITCurlExerciseNameAlternatingDumbbellBicepsCurlOnSwissBall ((FITCurlExerciseName)1) +#define FITCurlExerciseNameAlternatingInclineDumbbellBicepsCurl ((FITCurlExerciseName)2) +#define FITCurlExerciseNameBarbellBicepsCurl ((FITCurlExerciseName)3) +#define FITCurlExerciseNameBarbellReverseWristCurl ((FITCurlExerciseName)4) +#define FITCurlExerciseNameBarbellWristCurl ((FITCurlExerciseName)5) +#define FITCurlExerciseNameBehindTheBackBarbellReverseWristCurl ((FITCurlExerciseName)6) +#define FITCurlExerciseNameBehindTheBackOneArmCableCurl ((FITCurlExerciseName)7) +#define FITCurlExerciseNameCableBicepsCurl ((FITCurlExerciseName)8) +#define FITCurlExerciseNameCableHammerCurl ((FITCurlExerciseName)9) +#define FITCurlExerciseNameCheatingBarbellBicepsCurl ((FITCurlExerciseName)10) +#define FITCurlExerciseNameCloseGripEzBarBicepsCurl ((FITCurlExerciseName)11) +#define FITCurlExerciseNameCrossBodyDumbbellHammerCurl ((FITCurlExerciseName)12) +#define FITCurlExerciseNameDeadHangBicepsCurl ((FITCurlExerciseName)13) +#define FITCurlExerciseNameDeclineHammerCurl ((FITCurlExerciseName)14) +#define FITCurlExerciseNameDumbbellBicepsCurlWithStaticHold ((FITCurlExerciseName)15) +#define FITCurlExerciseNameDumbbellHammerCurl ((FITCurlExerciseName)16) +#define FITCurlExerciseNameDumbbellReverseWristCurl ((FITCurlExerciseName)17) +#define FITCurlExerciseNameDumbbellWristCurl ((FITCurlExerciseName)18) +#define FITCurlExerciseNameEzBarPreacherCurl ((FITCurlExerciseName)19) +#define FITCurlExerciseNameForwardBendBicepsCurl ((FITCurlExerciseName)20) +#define FITCurlExerciseNameHammerCurlToPress ((FITCurlExerciseName)21) +#define FITCurlExerciseNameInclineDumbbellBicepsCurl ((FITCurlExerciseName)22) +#define FITCurlExerciseNameInclineOffsetThumbDumbbellCurl ((FITCurlExerciseName)23) +#define FITCurlExerciseNameKettlebellBicepsCurl ((FITCurlExerciseName)24) +#define FITCurlExerciseNameLyingConcentrationCableCurl ((FITCurlExerciseName)25) +#define FITCurlExerciseNameOneArmPreacherCurl ((FITCurlExerciseName)26) +#define FITCurlExerciseNamePlatePinchCurl ((FITCurlExerciseName)27) +#define FITCurlExerciseNamePreacherCurlWithCable ((FITCurlExerciseName)28) +#define FITCurlExerciseNameReverseEzBarCurl ((FITCurlExerciseName)29) +#define FITCurlExerciseNameReverseGripWristCurl ((FITCurlExerciseName)30) +#define FITCurlExerciseNameReverseGripBarbellBicepsCurl ((FITCurlExerciseName)31) +#define FITCurlExerciseNameSeatedAlternatingDumbbellBicepsCurl ((FITCurlExerciseName)32) +#define FITCurlExerciseNameSeatedDumbbellBicepsCurl ((FITCurlExerciseName)33) +#define FITCurlExerciseNameSeatedReverseDumbbellCurl ((FITCurlExerciseName)34) +#define FITCurlExerciseNameSplitStanceOffsetPinkyDumbbellCurl ((FITCurlExerciseName)35) +#define FITCurlExerciseNameStandingAlternatingDumbbellCurls ((FITCurlExerciseName)36) +#define FITCurlExerciseNameStandingDumbbellBicepsCurl ((FITCurlExerciseName)37) +#define FITCurlExerciseNameStandingEzBarBicepsCurl ((FITCurlExerciseName)38) +#define FITCurlExerciseNameStaticCurl ((FITCurlExerciseName)39) +#define FITCurlExerciseNameSwissBallDumbbellOverheadTricepsExtension ((FITCurlExerciseName)40) +#define FITCurlExerciseNameSwissBallEzBarPreacherCurl ((FITCurlExerciseName)41) +#define FITCurlExerciseNameTwistingStandingDumbbellBicepsCurl ((FITCurlExerciseName)42) +#define FITCurlExerciseNameWideGripEzBarBicepsCurl ((FITCurlExerciseName)43) +#define FITCurlExerciseNameCount 44 + +typedef FITUInt16 FITDeadliftExerciseName; +#define FITDeadliftExerciseNameInvalid FITUInt16Invalid +#define FITDeadliftExerciseNameBarbellDeadlift ((FITDeadliftExerciseName)0) +#define FITDeadliftExerciseNameBarbellStraightLegDeadlift ((FITDeadliftExerciseName)1) +#define FITDeadliftExerciseNameDumbbellDeadlift ((FITDeadliftExerciseName)2) +#define FITDeadliftExerciseNameDumbbellSingleLegDeadliftToRow ((FITDeadliftExerciseName)3) +#define FITDeadliftExerciseNameDumbbellStraightLegDeadlift ((FITDeadliftExerciseName)4) +#define FITDeadliftExerciseNameKettlebellFloorToShelf ((FITDeadliftExerciseName)5) +#define FITDeadliftExerciseNameOneArmOneLegDeadlift ((FITDeadliftExerciseName)6) +#define FITDeadliftExerciseNameRackPull ((FITDeadliftExerciseName)7) +#define FITDeadliftExerciseNameRotationalDumbbellStraightLegDeadlift ((FITDeadliftExerciseName)8) +#define FITDeadliftExerciseNameSingleArmDeadlift ((FITDeadliftExerciseName)9) +#define FITDeadliftExerciseNameSingleLegBarbellDeadlift ((FITDeadliftExerciseName)10) +#define FITDeadliftExerciseNameSingleLegBarbellStraightLegDeadlift ((FITDeadliftExerciseName)11) +#define FITDeadliftExerciseNameSingleLegDeadliftWithBarbell ((FITDeadliftExerciseName)12) +#define FITDeadliftExerciseNameSingleLegRdlCircuit ((FITDeadliftExerciseName)13) +#define FITDeadliftExerciseNameSingleLegRomanianDeadliftWithDumbbell ((FITDeadliftExerciseName)14) +#define FITDeadliftExerciseNameSumoDeadlift ((FITDeadliftExerciseName)15) +#define FITDeadliftExerciseNameSumoDeadliftHighPull ((FITDeadliftExerciseName)16) +#define FITDeadliftExerciseNameTrapBarDeadlift ((FITDeadliftExerciseName)17) +#define FITDeadliftExerciseNameWideGripBarbellDeadlift ((FITDeadliftExerciseName)18) +#define FITDeadliftExerciseNameCount 19 + +typedef FITUInt16 FITFlyeExerciseName; +#define FITFlyeExerciseNameInvalid FITUInt16Invalid +#define FITFlyeExerciseNameCableCrossover ((FITFlyeExerciseName)0) +#define FITFlyeExerciseNameDeclineDumbbellFlye ((FITFlyeExerciseName)1) +#define FITFlyeExerciseNameDumbbellFlye ((FITFlyeExerciseName)2) +#define FITFlyeExerciseNameInclineDumbbellFlye ((FITFlyeExerciseName)3) +#define FITFlyeExerciseNameKettlebellFlye ((FITFlyeExerciseName)4) +#define FITFlyeExerciseNameKneelingRearFlye ((FITFlyeExerciseName)5) +#define FITFlyeExerciseNameSingleArmStandingCableReverseFlye ((FITFlyeExerciseName)6) +#define FITFlyeExerciseNameSwissBallDumbbellFlye ((FITFlyeExerciseName)7) +#define FITFlyeExerciseNameArmRotations ((FITFlyeExerciseName)8) +#define FITFlyeExerciseNameHugATree ((FITFlyeExerciseName)9) +#define FITFlyeExerciseNameCount 10 + +typedef FITUInt16 FITHipRaiseExerciseName; +#define FITHipRaiseExerciseNameInvalid FITUInt16Invalid +#define FITHipRaiseExerciseNameBarbellHipThrustOnFloor ((FITHipRaiseExerciseName)0) +#define FITHipRaiseExerciseNameBarbellHipThrustWithBench ((FITHipRaiseExerciseName)1) +#define FITHipRaiseExerciseNameBentKneeSwissBallReverseHipRaise ((FITHipRaiseExerciseName)2) +#define FITHipRaiseExerciseNameWeightedBentKneeSwissBallReverseHipRaise ((FITHipRaiseExerciseName)3) +#define FITHipRaiseExerciseNameBridgeWithLegExtension ((FITHipRaiseExerciseName)4) +#define FITHipRaiseExerciseNameWeightedBridgeWithLegExtension ((FITHipRaiseExerciseName)5) +#define FITHipRaiseExerciseNameClamBridge ((FITHipRaiseExerciseName)6) +#define FITHipRaiseExerciseNameFrontKickTabletop ((FITHipRaiseExerciseName)7) +#define FITHipRaiseExerciseNameWeightedFrontKickTabletop ((FITHipRaiseExerciseName)8) +#define FITHipRaiseExerciseNameHipExtensionAndCross ((FITHipRaiseExerciseName)9) +#define FITHipRaiseExerciseNameWeightedHipExtensionAndCross ((FITHipRaiseExerciseName)10) +#define FITHipRaiseExerciseNameHipRaise ((FITHipRaiseExerciseName)11) +#define FITHipRaiseExerciseNameWeightedHipRaise ((FITHipRaiseExerciseName)12) +#define FITHipRaiseExerciseNameHipRaiseWithFeetOnSwissBall ((FITHipRaiseExerciseName)13) +#define FITHipRaiseExerciseNameWeightedHipRaiseWithFeetOnSwissBall ((FITHipRaiseExerciseName)14) +#define FITHipRaiseExerciseNameHipRaiseWithHeadOnBosuBall ((FITHipRaiseExerciseName)15) +#define FITHipRaiseExerciseNameWeightedHipRaiseWithHeadOnBosuBall ((FITHipRaiseExerciseName)16) +#define FITHipRaiseExerciseNameHipRaiseWithHeadOnSwissBall ((FITHipRaiseExerciseName)17) +#define FITHipRaiseExerciseNameWeightedHipRaiseWithHeadOnSwissBall ((FITHipRaiseExerciseName)18) +#define FITHipRaiseExerciseNameHipRaiseWithKneeSqueeze ((FITHipRaiseExerciseName)19) +#define FITHipRaiseExerciseNameWeightedHipRaiseWithKneeSqueeze ((FITHipRaiseExerciseName)20) +#define FITHipRaiseExerciseNameInclineRearLegExtension ((FITHipRaiseExerciseName)21) +#define FITHipRaiseExerciseNameWeightedInclineRearLegExtension ((FITHipRaiseExerciseName)22) +#define FITHipRaiseExerciseNameKettlebellSwing ((FITHipRaiseExerciseName)23) +#define FITHipRaiseExerciseNameMarchingHipRaise ((FITHipRaiseExerciseName)24) +#define FITHipRaiseExerciseNameWeightedMarchingHipRaise ((FITHipRaiseExerciseName)25) +#define FITHipRaiseExerciseNameMarchingHipRaiseWithFeetOnASwissBall ((FITHipRaiseExerciseName)26) +#define FITHipRaiseExerciseNameWeightedMarchingHipRaiseWithFeetOnASwissBall ((FITHipRaiseExerciseName)27) +#define FITHipRaiseExerciseNameReverseHipRaise ((FITHipRaiseExerciseName)28) +#define FITHipRaiseExerciseNameWeightedReverseHipRaise ((FITHipRaiseExerciseName)29) +#define FITHipRaiseExerciseNameSingleLegHipRaise ((FITHipRaiseExerciseName)30) +#define FITHipRaiseExerciseNameWeightedSingleLegHipRaise ((FITHipRaiseExerciseName)31) +#define FITHipRaiseExerciseNameSingleLegHipRaiseWithFootOnBench ((FITHipRaiseExerciseName)32) +#define FITHipRaiseExerciseNameWeightedSingleLegHipRaiseWithFootOnBench ((FITHipRaiseExerciseName)33) +#define FITHipRaiseExerciseNameSingleLegHipRaiseWithFootOnBosuBall ((FITHipRaiseExerciseName)34) +#define FITHipRaiseExerciseNameWeightedSingleLegHipRaiseWithFootOnBosuBall ((FITHipRaiseExerciseName)35) +#define FITHipRaiseExerciseNameSingleLegHipRaiseWithFootOnFoamRoller ((FITHipRaiseExerciseName)36) +#define FITHipRaiseExerciseNameWeightedSingleLegHipRaiseWithFootOnFoamRoller ((FITHipRaiseExerciseName)37) +#define FITHipRaiseExerciseNameSingleLegHipRaiseWithFootOnMedicineBall ((FITHipRaiseExerciseName)38) +#define FITHipRaiseExerciseNameWeightedSingleLegHipRaiseWithFootOnMedicineBall ((FITHipRaiseExerciseName)39) +#define FITHipRaiseExerciseNameSingleLegHipRaiseWithHeadOnBosuBall ((FITHipRaiseExerciseName)40) +#define FITHipRaiseExerciseNameWeightedSingleLegHipRaiseWithHeadOnBosuBall ((FITHipRaiseExerciseName)41) +#define FITHipRaiseExerciseNameWeightedClamBridge ((FITHipRaiseExerciseName)42) +#define FITHipRaiseExerciseNameSingleLegSwissBallHipRaiseAndLegCurl ((FITHipRaiseExerciseName)43) +#define FITHipRaiseExerciseNameClams ((FITHipRaiseExerciseName)44) +#define FITHipRaiseExerciseNameInnerThighCircles ((FITHipRaiseExerciseName)45) // Deprecated do not use +#define FITHipRaiseExerciseNameInnerThighSideLift ((FITHipRaiseExerciseName)46) // Deprecated do not use +#define FITHipRaiseExerciseNameLegCircles ((FITHipRaiseExerciseName)47) +#define FITHipRaiseExerciseNameLegLift ((FITHipRaiseExerciseName)48) +#define FITHipRaiseExerciseNameLegLiftInExternalRotation ((FITHipRaiseExerciseName)49) +#define FITHipRaiseExerciseNameCount 50 + +typedef FITUInt16 FITHipStabilityExerciseName; +#define FITHipStabilityExerciseNameInvalid FITUInt16Invalid +#define FITHipStabilityExerciseNameBandSideLyingLegRaise ((FITHipStabilityExerciseName)0) +#define FITHipStabilityExerciseNameDeadBug ((FITHipStabilityExerciseName)1) +#define FITHipStabilityExerciseNameWeightedDeadBug ((FITHipStabilityExerciseName)2) +#define FITHipStabilityExerciseNameExternalHipRaise ((FITHipStabilityExerciseName)3) +#define FITHipStabilityExerciseNameWeightedExternalHipRaise ((FITHipStabilityExerciseName)4) +#define FITHipStabilityExerciseNameFireHydrantKicks ((FITHipStabilityExerciseName)5) +#define FITHipStabilityExerciseNameWeightedFireHydrantKicks ((FITHipStabilityExerciseName)6) +#define FITHipStabilityExerciseNameHipCircles ((FITHipStabilityExerciseName)7) +#define FITHipStabilityExerciseNameWeightedHipCircles ((FITHipStabilityExerciseName)8) +#define FITHipStabilityExerciseNameInnerThighLift ((FITHipStabilityExerciseName)9) +#define FITHipStabilityExerciseNameWeightedInnerThighLift ((FITHipStabilityExerciseName)10) +#define FITHipStabilityExerciseNameLateralWalksWithBandAtAnkles ((FITHipStabilityExerciseName)11) +#define FITHipStabilityExerciseNamePretzelSideKick ((FITHipStabilityExerciseName)12) +#define FITHipStabilityExerciseNameWeightedPretzelSideKick ((FITHipStabilityExerciseName)13) +#define FITHipStabilityExerciseNameProneHipInternalRotation ((FITHipStabilityExerciseName)14) +#define FITHipStabilityExerciseNameWeightedProneHipInternalRotation ((FITHipStabilityExerciseName)15) +#define FITHipStabilityExerciseNameQuadruped ((FITHipStabilityExerciseName)16) +#define FITHipStabilityExerciseNameQuadrupedHipExtension ((FITHipStabilityExerciseName)17) +#define FITHipStabilityExerciseNameWeightedQuadrupedHipExtension ((FITHipStabilityExerciseName)18) +#define FITHipStabilityExerciseNameQuadrupedWithLegLift ((FITHipStabilityExerciseName)19) +#define FITHipStabilityExerciseNameWeightedQuadrupedWithLegLift ((FITHipStabilityExerciseName)20) +#define FITHipStabilityExerciseNameSideLyingLegRaise ((FITHipStabilityExerciseName)21) +#define FITHipStabilityExerciseNameWeightedSideLyingLegRaise ((FITHipStabilityExerciseName)22) +#define FITHipStabilityExerciseNameSlidingHipAdduction ((FITHipStabilityExerciseName)23) +#define FITHipStabilityExerciseNameWeightedSlidingHipAdduction ((FITHipStabilityExerciseName)24) +#define FITHipStabilityExerciseNameStandingAdduction ((FITHipStabilityExerciseName)25) +#define FITHipStabilityExerciseNameWeightedStandingAdduction ((FITHipStabilityExerciseName)26) +#define FITHipStabilityExerciseNameStandingCableHipAbduction ((FITHipStabilityExerciseName)27) +#define FITHipStabilityExerciseNameStandingHipAbduction ((FITHipStabilityExerciseName)28) +#define FITHipStabilityExerciseNameWeightedStandingHipAbduction ((FITHipStabilityExerciseName)29) +#define FITHipStabilityExerciseNameStandingRearLegRaise ((FITHipStabilityExerciseName)30) +#define FITHipStabilityExerciseNameWeightedStandingRearLegRaise ((FITHipStabilityExerciseName)31) +#define FITHipStabilityExerciseNameSupineHipInternalRotation ((FITHipStabilityExerciseName)32) +#define FITHipStabilityExerciseNameWeightedSupineHipInternalRotation ((FITHipStabilityExerciseName)33) +#define FITHipStabilityExerciseNameCount 34 + +typedef FITUInt16 FITHipSwingExerciseName; +#define FITHipSwingExerciseNameInvalid FITUInt16Invalid +#define FITHipSwingExerciseNameSingleArmKettlebellSwing ((FITHipSwingExerciseName)0) +#define FITHipSwingExerciseNameSingleArmDumbbellSwing ((FITHipSwingExerciseName)1) +#define FITHipSwingExerciseNameStepOutSwing ((FITHipSwingExerciseName)2) +#define FITHipSwingExerciseNameCount 3 + +typedef FITUInt16 FITHyperextensionExerciseName; +#define FITHyperextensionExerciseNameInvalid FITUInt16Invalid +#define FITHyperextensionExerciseNameBackExtensionWithOppositeArmAndLegReach ((FITHyperextensionExerciseName)0) +#define FITHyperextensionExerciseNameWeightedBackExtensionWithOppositeArmAndLegReach ((FITHyperextensionExerciseName)1) +#define FITHyperextensionExerciseNameBaseRotations ((FITHyperextensionExerciseName)2) +#define FITHyperextensionExerciseNameWeightedBaseRotations ((FITHyperextensionExerciseName)3) +#define FITHyperextensionExerciseNameBentKneeReverseHyperextension ((FITHyperextensionExerciseName)4) +#define FITHyperextensionExerciseNameWeightedBentKneeReverseHyperextension ((FITHyperextensionExerciseName)5) +#define FITHyperextensionExerciseNameHollowHoldAndRoll ((FITHyperextensionExerciseName)6) +#define FITHyperextensionExerciseNameWeightedHollowHoldAndRoll ((FITHyperextensionExerciseName)7) +#define FITHyperextensionExerciseNameKicks ((FITHyperextensionExerciseName)8) +#define FITHyperextensionExerciseNameWeightedKicks ((FITHyperextensionExerciseName)9) +#define FITHyperextensionExerciseNameKneeRaises ((FITHyperextensionExerciseName)10) +#define FITHyperextensionExerciseNameWeightedKneeRaises ((FITHyperextensionExerciseName)11) +#define FITHyperextensionExerciseNameKneelingSuperman ((FITHyperextensionExerciseName)12) +#define FITHyperextensionExerciseNameWeightedKneelingSuperman ((FITHyperextensionExerciseName)13) +#define FITHyperextensionExerciseNameLatPullDownWithRow ((FITHyperextensionExerciseName)14) +#define FITHyperextensionExerciseNameMedicineBallDeadliftToReach ((FITHyperextensionExerciseName)15) +#define FITHyperextensionExerciseNameOneArmOneLegRow ((FITHyperextensionExerciseName)16) +#define FITHyperextensionExerciseNameOneArmRowWithBand ((FITHyperextensionExerciseName)17) +#define FITHyperextensionExerciseNameOverheadLungeWithMedicineBall ((FITHyperextensionExerciseName)18) +#define FITHyperextensionExerciseNamePlankKneeTucks ((FITHyperextensionExerciseName)19) +#define FITHyperextensionExerciseNameWeightedPlankKneeTucks ((FITHyperextensionExerciseName)20) +#define FITHyperextensionExerciseNameSideStep ((FITHyperextensionExerciseName)21) +#define FITHyperextensionExerciseNameWeightedSideStep ((FITHyperextensionExerciseName)22) +#define FITHyperextensionExerciseNameSingleLegBackExtension ((FITHyperextensionExerciseName)23) +#define FITHyperextensionExerciseNameWeightedSingleLegBackExtension ((FITHyperextensionExerciseName)24) +#define FITHyperextensionExerciseNameSpineExtension ((FITHyperextensionExerciseName)25) +#define FITHyperextensionExerciseNameWeightedSpineExtension ((FITHyperextensionExerciseName)26) +#define FITHyperextensionExerciseNameStaticBackExtension ((FITHyperextensionExerciseName)27) +#define FITHyperextensionExerciseNameWeightedStaticBackExtension ((FITHyperextensionExerciseName)28) +#define FITHyperextensionExerciseNameSupermanFromFloor ((FITHyperextensionExerciseName)29) +#define FITHyperextensionExerciseNameWeightedSupermanFromFloor ((FITHyperextensionExerciseName)30) +#define FITHyperextensionExerciseNameSwissBallBackExtension ((FITHyperextensionExerciseName)31) +#define FITHyperextensionExerciseNameWeightedSwissBallBackExtension ((FITHyperextensionExerciseName)32) +#define FITHyperextensionExerciseNameSwissBallHyperextension ((FITHyperextensionExerciseName)33) +#define FITHyperextensionExerciseNameWeightedSwissBallHyperextension ((FITHyperextensionExerciseName)34) +#define FITHyperextensionExerciseNameSwissBallOppositeArmAndLegLift ((FITHyperextensionExerciseName)35) +#define FITHyperextensionExerciseNameWeightedSwissBallOppositeArmAndLegLift ((FITHyperextensionExerciseName)36) +#define FITHyperextensionExerciseNameSupermanOnSwissBall ((FITHyperextensionExerciseName)37) +#define FITHyperextensionExerciseNameCobra ((FITHyperextensionExerciseName)38) +#define FITHyperextensionExerciseNameSupineFloorBarre ((FITHyperextensionExerciseName)39) // Deprecated do not use +#define FITHyperextensionExerciseNameCount 40 + +typedef FITUInt16 FITLateralRaiseExerciseName; +#define FITLateralRaiseExerciseNameInvalid FITUInt16Invalid +#define FITLateralRaiseExerciseName45DegreeCableExternalRotation ((FITLateralRaiseExerciseName)0) +#define FITLateralRaiseExerciseNameAlternatingLateralRaiseWithStaticHold ((FITLateralRaiseExerciseName)1) +#define FITLateralRaiseExerciseNameBarMuscleUp ((FITLateralRaiseExerciseName)2) +#define FITLateralRaiseExerciseNameBentOverLateralRaise ((FITLateralRaiseExerciseName)3) +#define FITLateralRaiseExerciseNameCableDiagonalRaise ((FITLateralRaiseExerciseName)4) +#define FITLateralRaiseExerciseNameCableFrontRaise ((FITLateralRaiseExerciseName)5) +#define FITLateralRaiseExerciseNameCalorieRow ((FITLateralRaiseExerciseName)6) +#define FITLateralRaiseExerciseNameComboShoulderRaise ((FITLateralRaiseExerciseName)7) +#define FITLateralRaiseExerciseNameDumbbellDiagonalRaise ((FITLateralRaiseExerciseName)8) +#define FITLateralRaiseExerciseNameDumbbellVRaise ((FITLateralRaiseExerciseName)9) +#define FITLateralRaiseExerciseNameFrontRaise ((FITLateralRaiseExerciseName)10) +#define FITLateralRaiseExerciseNameLeaningDumbbellLateralRaise ((FITLateralRaiseExerciseName)11) +#define FITLateralRaiseExerciseNameLyingDumbbellRaise ((FITLateralRaiseExerciseName)12) +#define FITLateralRaiseExerciseNameMuscleUp ((FITLateralRaiseExerciseName)13) +#define FITLateralRaiseExerciseNameOneArmCableLateralRaise ((FITLateralRaiseExerciseName)14) +#define FITLateralRaiseExerciseNameOverhandGripRearLateralRaise ((FITLateralRaiseExerciseName)15) +#define FITLateralRaiseExerciseNamePlateRaises ((FITLateralRaiseExerciseName)16) +#define FITLateralRaiseExerciseNameRingDip ((FITLateralRaiseExerciseName)17) +#define FITLateralRaiseExerciseNameWeightedRingDip ((FITLateralRaiseExerciseName)18) +#define FITLateralRaiseExerciseNameRingMuscleUp ((FITLateralRaiseExerciseName)19) +#define FITLateralRaiseExerciseNameWeightedRingMuscleUp ((FITLateralRaiseExerciseName)20) +#define FITLateralRaiseExerciseNameRopeClimb ((FITLateralRaiseExerciseName)21) +#define FITLateralRaiseExerciseNameWeightedRopeClimb ((FITLateralRaiseExerciseName)22) +#define FITLateralRaiseExerciseNameScaption ((FITLateralRaiseExerciseName)23) +#define FITLateralRaiseExerciseNameSeatedLateralRaise ((FITLateralRaiseExerciseName)24) +#define FITLateralRaiseExerciseNameSeatedRearLateralRaise ((FITLateralRaiseExerciseName)25) +#define FITLateralRaiseExerciseNameSideLyingLateralRaise ((FITLateralRaiseExerciseName)26) +#define FITLateralRaiseExerciseNameStandingLift ((FITLateralRaiseExerciseName)27) +#define FITLateralRaiseExerciseNameSuspendedRow ((FITLateralRaiseExerciseName)28) +#define FITLateralRaiseExerciseNameUnderhandGripRearLateralRaise ((FITLateralRaiseExerciseName)29) +#define FITLateralRaiseExerciseNameWallSlide ((FITLateralRaiseExerciseName)30) +#define FITLateralRaiseExerciseNameWeightedWallSlide ((FITLateralRaiseExerciseName)31) +#define FITLateralRaiseExerciseNameArmCircles ((FITLateralRaiseExerciseName)32) +#define FITLateralRaiseExerciseNameShavingTheHead ((FITLateralRaiseExerciseName)33) +#define FITLateralRaiseExerciseNameCount 34 + +typedef FITUInt16 FITLegCurlExerciseName; +#define FITLegCurlExerciseNameInvalid FITUInt16Invalid +#define FITLegCurlExerciseNameLegCurl ((FITLegCurlExerciseName)0) +#define FITLegCurlExerciseNameWeightedLegCurl ((FITLegCurlExerciseName)1) +#define FITLegCurlExerciseNameGoodMorning ((FITLegCurlExerciseName)2) +#define FITLegCurlExerciseNameSeatedBarbellGoodMorning ((FITLegCurlExerciseName)3) +#define FITLegCurlExerciseNameSingleLegBarbellGoodMorning ((FITLegCurlExerciseName)4) +#define FITLegCurlExerciseNameSingleLegSlidingLegCurl ((FITLegCurlExerciseName)5) +#define FITLegCurlExerciseNameSlidingLegCurl ((FITLegCurlExerciseName)6) +#define FITLegCurlExerciseNameSplitBarbellGoodMorning ((FITLegCurlExerciseName)7) +#define FITLegCurlExerciseNameSplitStanceExtension ((FITLegCurlExerciseName)8) +#define FITLegCurlExerciseNameStaggeredStanceGoodMorning ((FITLegCurlExerciseName)9) +#define FITLegCurlExerciseNameSwissBallHipRaiseAndLegCurl ((FITLegCurlExerciseName)10) +#define FITLegCurlExerciseNameZercherGoodMorning ((FITLegCurlExerciseName)11) +#define FITLegCurlExerciseNameCount 12 + +typedef FITUInt16 FITLegRaiseExerciseName; +#define FITLegRaiseExerciseNameInvalid FITUInt16Invalid +#define FITLegRaiseExerciseNameHangingKneeRaise ((FITLegRaiseExerciseName)0) +#define FITLegRaiseExerciseNameHangingLegRaise ((FITLegRaiseExerciseName)1) +#define FITLegRaiseExerciseNameWeightedHangingLegRaise ((FITLegRaiseExerciseName)2) +#define FITLegRaiseExerciseNameHangingSingleLegRaise ((FITLegRaiseExerciseName)3) +#define FITLegRaiseExerciseNameWeightedHangingSingleLegRaise ((FITLegRaiseExerciseName)4) +#define FITLegRaiseExerciseNameKettlebellLegRaises ((FITLegRaiseExerciseName)5) +#define FITLegRaiseExerciseNameLegLoweringDrill ((FITLegRaiseExerciseName)6) +#define FITLegRaiseExerciseNameWeightedLegLoweringDrill ((FITLegRaiseExerciseName)7) +#define FITLegRaiseExerciseNameLyingStraightLegRaise ((FITLegRaiseExerciseName)8) +#define FITLegRaiseExerciseNameWeightedLyingStraightLegRaise ((FITLegRaiseExerciseName)9) +#define FITLegRaiseExerciseNameMedicineBallLegDrops ((FITLegRaiseExerciseName)10) +#define FITLegRaiseExerciseNameQuadrupedLegRaise ((FITLegRaiseExerciseName)11) +#define FITLegRaiseExerciseNameWeightedQuadrupedLegRaise ((FITLegRaiseExerciseName)12) +#define FITLegRaiseExerciseNameReverseLegRaise ((FITLegRaiseExerciseName)13) +#define FITLegRaiseExerciseNameWeightedReverseLegRaise ((FITLegRaiseExerciseName)14) +#define FITLegRaiseExerciseNameReverseLegRaiseOnSwissBall ((FITLegRaiseExerciseName)15) +#define FITLegRaiseExerciseNameWeightedReverseLegRaiseOnSwissBall ((FITLegRaiseExerciseName)16) +#define FITLegRaiseExerciseNameSingleLegLoweringDrill ((FITLegRaiseExerciseName)17) +#define FITLegRaiseExerciseNameWeightedSingleLegLoweringDrill ((FITLegRaiseExerciseName)18) +#define FITLegRaiseExerciseNameWeightedHangingKneeRaise ((FITLegRaiseExerciseName)19) +#define FITLegRaiseExerciseNameLateralStepover ((FITLegRaiseExerciseName)20) +#define FITLegRaiseExerciseNameWeightedLateralStepover ((FITLegRaiseExerciseName)21) +#define FITLegRaiseExerciseNameCount 22 + +typedef FITUInt16 FITLungeExerciseName; +#define FITLungeExerciseNameInvalid FITUInt16Invalid +#define FITLungeExerciseNameOverheadLunge ((FITLungeExerciseName)0) +#define FITLungeExerciseNameLungeMatrix ((FITLungeExerciseName)1) +#define FITLungeExerciseNameWeightedLungeMatrix ((FITLungeExerciseName)2) +#define FITLungeExerciseNameAlternatingBarbellForwardLunge ((FITLungeExerciseName)3) +#define FITLungeExerciseNameAlternatingDumbbellLungeWithReach ((FITLungeExerciseName)4) +#define FITLungeExerciseNameBackFootElevatedDumbbellSplitSquat ((FITLungeExerciseName)5) +#define FITLungeExerciseNameBarbellBoxLunge ((FITLungeExerciseName)6) +#define FITLungeExerciseNameBarbellBulgarianSplitSquat ((FITLungeExerciseName)7) +#define FITLungeExerciseNameBarbellCrossoverLunge ((FITLungeExerciseName)8) +#define FITLungeExerciseNameBarbellFrontSplitSquat ((FITLungeExerciseName)9) +#define FITLungeExerciseNameBarbellLunge ((FITLungeExerciseName)10) +#define FITLungeExerciseNameBarbellReverseLunge ((FITLungeExerciseName)11) +#define FITLungeExerciseNameBarbellSideLunge ((FITLungeExerciseName)12) +#define FITLungeExerciseNameBarbellSplitSquat ((FITLungeExerciseName)13) +#define FITLungeExerciseNameCoreControlRearLunge ((FITLungeExerciseName)14) +#define FITLungeExerciseNameDiagonalLunge ((FITLungeExerciseName)15) +#define FITLungeExerciseNameDropLunge ((FITLungeExerciseName)16) +#define FITLungeExerciseNameDumbbellBoxLunge ((FITLungeExerciseName)17) +#define FITLungeExerciseNameDumbbellBulgarianSplitSquat ((FITLungeExerciseName)18) +#define FITLungeExerciseNameDumbbellCrossoverLunge ((FITLungeExerciseName)19) +#define FITLungeExerciseNameDumbbellDiagonalLunge ((FITLungeExerciseName)20) +#define FITLungeExerciseNameDumbbellLunge ((FITLungeExerciseName)21) +#define FITLungeExerciseNameDumbbellLungeAndRotation ((FITLungeExerciseName)22) +#define FITLungeExerciseNameDumbbellOverheadBulgarianSplitSquat ((FITLungeExerciseName)23) +#define FITLungeExerciseNameDumbbellReverseLungeToHighKneeAndPress ((FITLungeExerciseName)24) +#define FITLungeExerciseNameDumbbellSideLunge ((FITLungeExerciseName)25) +#define FITLungeExerciseNameElevatedFrontFootBarbellSplitSquat ((FITLungeExerciseName)26) +#define FITLungeExerciseNameFrontFootElevatedDumbbellSplitSquat ((FITLungeExerciseName)27) +#define FITLungeExerciseNameGunslingerLunge ((FITLungeExerciseName)28) +#define FITLungeExerciseNameLawnmowerLunge ((FITLungeExerciseName)29) +#define FITLungeExerciseNameLowLungeWithIsometricAdduction ((FITLungeExerciseName)30) +#define FITLungeExerciseNameLowSideToSideLunge ((FITLungeExerciseName)31) +#define FITLungeExerciseNameLunge ((FITLungeExerciseName)32) +#define FITLungeExerciseNameWeightedLunge ((FITLungeExerciseName)33) +#define FITLungeExerciseNameLungeWithArmReach ((FITLungeExerciseName)34) +#define FITLungeExerciseNameLungeWithDiagonalReach ((FITLungeExerciseName)35) +#define FITLungeExerciseNameLungeWithSideBend ((FITLungeExerciseName)36) +#define FITLungeExerciseNameOffsetDumbbellLunge ((FITLungeExerciseName)37) +#define FITLungeExerciseNameOffsetDumbbellReverseLunge ((FITLungeExerciseName)38) +#define FITLungeExerciseNameOverheadBulgarianSplitSquat ((FITLungeExerciseName)39) +#define FITLungeExerciseNameOverheadDumbbellReverseLunge ((FITLungeExerciseName)40) +#define FITLungeExerciseNameOverheadDumbbellSplitSquat ((FITLungeExerciseName)41) +#define FITLungeExerciseNameOverheadLungeWithRotation ((FITLungeExerciseName)42) +#define FITLungeExerciseNameReverseBarbellBoxLunge ((FITLungeExerciseName)43) +#define FITLungeExerciseNameReverseBoxLunge ((FITLungeExerciseName)44) +#define FITLungeExerciseNameReverseDumbbellBoxLunge ((FITLungeExerciseName)45) +#define FITLungeExerciseNameReverseDumbbellCrossoverLunge ((FITLungeExerciseName)46) +#define FITLungeExerciseNameReverseDumbbellDiagonalLunge ((FITLungeExerciseName)47) +#define FITLungeExerciseNameReverseLungeWithReachBack ((FITLungeExerciseName)48) +#define FITLungeExerciseNameWeightedReverseLungeWithReachBack ((FITLungeExerciseName)49) +#define FITLungeExerciseNameReverseLungeWithTwistAndOverheadReach ((FITLungeExerciseName)50) +#define FITLungeExerciseNameWeightedReverseLungeWithTwistAndOverheadReach ((FITLungeExerciseName)51) +#define FITLungeExerciseNameReverseSlidingBoxLunge ((FITLungeExerciseName)52) +#define FITLungeExerciseNameWeightedReverseSlidingBoxLunge ((FITLungeExerciseName)53) +#define FITLungeExerciseNameReverseSlidingLunge ((FITLungeExerciseName)54) +#define FITLungeExerciseNameWeightedReverseSlidingLunge ((FITLungeExerciseName)55) +#define FITLungeExerciseNameRunnersLungeToBalance ((FITLungeExerciseName)56) +#define FITLungeExerciseNameWeightedRunnersLungeToBalance ((FITLungeExerciseName)57) +#define FITLungeExerciseNameShiftingSideLunge ((FITLungeExerciseName)58) +#define FITLungeExerciseNameSideAndCrossoverLunge ((FITLungeExerciseName)59) +#define FITLungeExerciseNameWeightedSideAndCrossoverLunge ((FITLungeExerciseName)60) +#define FITLungeExerciseNameSideLunge ((FITLungeExerciseName)61) +#define FITLungeExerciseNameWeightedSideLunge ((FITLungeExerciseName)62) +#define FITLungeExerciseNameSideLungeAndPress ((FITLungeExerciseName)63) +#define FITLungeExerciseNameSideLungeJumpOff ((FITLungeExerciseName)64) +#define FITLungeExerciseNameSideLungeSweep ((FITLungeExerciseName)65) +#define FITLungeExerciseNameWeightedSideLungeSweep ((FITLungeExerciseName)66) +#define FITLungeExerciseNameSideLungeToCrossoverTap ((FITLungeExerciseName)67) +#define FITLungeExerciseNameWeightedSideLungeToCrossoverTap ((FITLungeExerciseName)68) +#define FITLungeExerciseNameSideToSideLungeChops ((FITLungeExerciseName)69) +#define FITLungeExerciseNameWeightedSideToSideLungeChops ((FITLungeExerciseName)70) +#define FITLungeExerciseNameSiffJumpLunge ((FITLungeExerciseName)71) +#define FITLungeExerciseNameWeightedSiffJumpLunge ((FITLungeExerciseName)72) +#define FITLungeExerciseNameSingleArmReverseLungeAndPress ((FITLungeExerciseName)73) +#define FITLungeExerciseNameSlidingLateralLunge ((FITLungeExerciseName)74) +#define FITLungeExerciseNameWeightedSlidingLateralLunge ((FITLungeExerciseName)75) +#define FITLungeExerciseNameWalkingBarbellLunge ((FITLungeExerciseName)76) +#define FITLungeExerciseNameWalkingDumbbellLunge ((FITLungeExerciseName)77) +#define FITLungeExerciseNameWalkingLunge ((FITLungeExerciseName)78) +#define FITLungeExerciseNameWeightedWalkingLunge ((FITLungeExerciseName)79) +#define FITLungeExerciseNameWideGripOverheadBarbellSplitSquat ((FITLungeExerciseName)80) +#define FITLungeExerciseNameCount 81 + +typedef FITUInt16 FITOlympicLiftExerciseName; +#define FITOlympicLiftExerciseNameInvalid FITUInt16Invalid +#define FITOlympicLiftExerciseNameBarbellHangPowerClean ((FITOlympicLiftExerciseName)0) +#define FITOlympicLiftExerciseNameBarbellHangSquatClean ((FITOlympicLiftExerciseName)1) +#define FITOlympicLiftExerciseNameBarbellPowerClean ((FITOlympicLiftExerciseName)2) +#define FITOlympicLiftExerciseNameBarbellPowerSnatch ((FITOlympicLiftExerciseName)3) +#define FITOlympicLiftExerciseNameBarbellSquatClean ((FITOlympicLiftExerciseName)4) +#define FITOlympicLiftExerciseNameCleanAndJerk ((FITOlympicLiftExerciseName)5) +#define FITOlympicLiftExerciseNameBarbellHangPowerSnatch ((FITOlympicLiftExerciseName)6) +#define FITOlympicLiftExerciseNameBarbellHangPull ((FITOlympicLiftExerciseName)7) +#define FITOlympicLiftExerciseNameBarbellHighPull ((FITOlympicLiftExerciseName)8) +#define FITOlympicLiftExerciseNameBarbellSnatch ((FITOlympicLiftExerciseName)9) +#define FITOlympicLiftExerciseNameBarbellSplitJerk ((FITOlympicLiftExerciseName)10) +#define FITOlympicLiftExerciseNameClean ((FITOlympicLiftExerciseName)11) +#define FITOlympicLiftExerciseNameDumbbellClean ((FITOlympicLiftExerciseName)12) +#define FITOlympicLiftExerciseNameDumbbellHangPull ((FITOlympicLiftExerciseName)13) +#define FITOlympicLiftExerciseNameOneHandDumbbellSplitSnatch ((FITOlympicLiftExerciseName)14) +#define FITOlympicLiftExerciseNamePushJerk ((FITOlympicLiftExerciseName)15) +#define FITOlympicLiftExerciseNameSingleArmDumbbellSnatch ((FITOlympicLiftExerciseName)16) +#define FITOlympicLiftExerciseNameSingleArmHangSnatch ((FITOlympicLiftExerciseName)17) +#define FITOlympicLiftExerciseNameSingleArmKettlebellSnatch ((FITOlympicLiftExerciseName)18) +#define FITOlympicLiftExerciseNameSplitJerk ((FITOlympicLiftExerciseName)19) +#define FITOlympicLiftExerciseNameSquatCleanAndJerk ((FITOlympicLiftExerciseName)20) +#define FITOlympicLiftExerciseNameCount 21 + +typedef FITUInt16 FITPlankExerciseName; +#define FITPlankExerciseNameInvalid FITUInt16Invalid +#define FITPlankExerciseName45DegreePlank ((FITPlankExerciseName)0) +#define FITPlankExerciseNameWeighted45DegreePlank ((FITPlankExerciseName)1) +#define FITPlankExerciseName90DegreeStaticHold ((FITPlankExerciseName)2) +#define FITPlankExerciseNameWeighted90DegreeStaticHold ((FITPlankExerciseName)3) +#define FITPlankExerciseNameBearCrawl ((FITPlankExerciseName)4) +#define FITPlankExerciseNameWeightedBearCrawl ((FITPlankExerciseName)5) +#define FITPlankExerciseNameCrossBodyMountainClimber ((FITPlankExerciseName)6) +#define FITPlankExerciseNameWeightedCrossBodyMountainClimber ((FITPlankExerciseName)7) +#define FITPlankExerciseNameElbowPlankPikeJacks ((FITPlankExerciseName)8) +#define FITPlankExerciseNameWeightedElbowPlankPikeJacks ((FITPlankExerciseName)9) +#define FITPlankExerciseNameElevatedFeetPlank ((FITPlankExerciseName)10) +#define FITPlankExerciseNameWeightedElevatedFeetPlank ((FITPlankExerciseName)11) +#define FITPlankExerciseNameElevatorAbs ((FITPlankExerciseName)12) +#define FITPlankExerciseNameWeightedElevatorAbs ((FITPlankExerciseName)13) +#define FITPlankExerciseNameExtendedPlank ((FITPlankExerciseName)14) +#define FITPlankExerciseNameWeightedExtendedPlank ((FITPlankExerciseName)15) +#define FITPlankExerciseNameFullPlankPasseTwist ((FITPlankExerciseName)16) +#define FITPlankExerciseNameWeightedFullPlankPasseTwist ((FITPlankExerciseName)17) +#define FITPlankExerciseNameInchingElbowPlank ((FITPlankExerciseName)18) +#define FITPlankExerciseNameWeightedInchingElbowPlank ((FITPlankExerciseName)19) +#define FITPlankExerciseNameInchwormToSidePlank ((FITPlankExerciseName)20) +#define FITPlankExerciseNameWeightedInchwormToSidePlank ((FITPlankExerciseName)21) +#define FITPlankExerciseNameKneelingPlank ((FITPlankExerciseName)22) +#define FITPlankExerciseNameWeightedKneelingPlank ((FITPlankExerciseName)23) +#define FITPlankExerciseNameKneelingSidePlankWithLegLift ((FITPlankExerciseName)24) +#define FITPlankExerciseNameWeightedKneelingSidePlankWithLegLift ((FITPlankExerciseName)25) +#define FITPlankExerciseNameLateralRoll ((FITPlankExerciseName)26) +#define FITPlankExerciseNameWeightedLateralRoll ((FITPlankExerciseName)27) +#define FITPlankExerciseNameLyingReversePlank ((FITPlankExerciseName)28) +#define FITPlankExerciseNameWeightedLyingReversePlank ((FITPlankExerciseName)29) +#define FITPlankExerciseNameMedicineBallMountainClimber ((FITPlankExerciseName)30) +#define FITPlankExerciseNameWeightedMedicineBallMountainClimber ((FITPlankExerciseName)31) +#define FITPlankExerciseNameModifiedMountainClimberAndExtension ((FITPlankExerciseName)32) +#define FITPlankExerciseNameWeightedModifiedMountainClimberAndExtension ((FITPlankExerciseName)33) +#define FITPlankExerciseNameMountainClimber ((FITPlankExerciseName)34) +#define FITPlankExerciseNameWeightedMountainClimber ((FITPlankExerciseName)35) +#define FITPlankExerciseNameMountainClimberOnSlidingDiscs ((FITPlankExerciseName)36) +#define FITPlankExerciseNameWeightedMountainClimberOnSlidingDiscs ((FITPlankExerciseName)37) +#define FITPlankExerciseNameMountainClimberWithFeetOnBosuBall ((FITPlankExerciseName)38) +#define FITPlankExerciseNameWeightedMountainClimberWithFeetOnBosuBall ((FITPlankExerciseName)39) +#define FITPlankExerciseNameMountainClimberWithHandsOnBench ((FITPlankExerciseName)40) +#define FITPlankExerciseNameMountainClimberWithHandsOnSwissBall ((FITPlankExerciseName)41) +#define FITPlankExerciseNameWeightedMountainClimberWithHandsOnSwissBall ((FITPlankExerciseName)42) +#define FITPlankExerciseNamePlank ((FITPlankExerciseName)43) +#define FITPlankExerciseNamePlankJacksWithFeetOnSlidingDiscs ((FITPlankExerciseName)44) +#define FITPlankExerciseNameWeightedPlankJacksWithFeetOnSlidingDiscs ((FITPlankExerciseName)45) +#define FITPlankExerciseNamePlankKneeTwist ((FITPlankExerciseName)46) +#define FITPlankExerciseNameWeightedPlankKneeTwist ((FITPlankExerciseName)47) +#define FITPlankExerciseNamePlankPikeJumps ((FITPlankExerciseName)48) +#define FITPlankExerciseNameWeightedPlankPikeJumps ((FITPlankExerciseName)49) +#define FITPlankExerciseNamePlankPikes ((FITPlankExerciseName)50) +#define FITPlankExerciseNameWeightedPlankPikes ((FITPlankExerciseName)51) +#define FITPlankExerciseNamePlankToStandUp ((FITPlankExerciseName)52) +#define FITPlankExerciseNameWeightedPlankToStandUp ((FITPlankExerciseName)53) +#define FITPlankExerciseNamePlankWithArmRaise ((FITPlankExerciseName)54) +#define FITPlankExerciseNameWeightedPlankWithArmRaise ((FITPlankExerciseName)55) +#define FITPlankExerciseNamePlankWithKneeToElbow ((FITPlankExerciseName)56) +#define FITPlankExerciseNameWeightedPlankWithKneeToElbow ((FITPlankExerciseName)57) +#define FITPlankExerciseNamePlankWithObliqueCrunch ((FITPlankExerciseName)58) +#define FITPlankExerciseNameWeightedPlankWithObliqueCrunch ((FITPlankExerciseName)59) +#define FITPlankExerciseNamePlyometricSidePlank ((FITPlankExerciseName)60) +#define FITPlankExerciseNameWeightedPlyometricSidePlank ((FITPlankExerciseName)61) +#define FITPlankExerciseNameRollingSidePlank ((FITPlankExerciseName)62) +#define FITPlankExerciseNameWeightedRollingSidePlank ((FITPlankExerciseName)63) +#define FITPlankExerciseNameSideKickPlank ((FITPlankExerciseName)64) +#define FITPlankExerciseNameWeightedSideKickPlank ((FITPlankExerciseName)65) +#define FITPlankExerciseNameSidePlank ((FITPlankExerciseName)66) +#define FITPlankExerciseNameWeightedSidePlank ((FITPlankExerciseName)67) +#define FITPlankExerciseNameSidePlankAndRow ((FITPlankExerciseName)68) +#define FITPlankExerciseNameWeightedSidePlankAndRow ((FITPlankExerciseName)69) +#define FITPlankExerciseNameSidePlankLift ((FITPlankExerciseName)70) +#define FITPlankExerciseNameWeightedSidePlankLift ((FITPlankExerciseName)71) +#define FITPlankExerciseNameSidePlankWithElbowOnBosuBall ((FITPlankExerciseName)72) +#define FITPlankExerciseNameWeightedSidePlankWithElbowOnBosuBall ((FITPlankExerciseName)73) +#define FITPlankExerciseNameSidePlankWithFeetOnBench ((FITPlankExerciseName)74) +#define FITPlankExerciseNameWeightedSidePlankWithFeetOnBench ((FITPlankExerciseName)75) +#define FITPlankExerciseNameSidePlankWithKneeCircle ((FITPlankExerciseName)76) +#define FITPlankExerciseNameWeightedSidePlankWithKneeCircle ((FITPlankExerciseName)77) +#define FITPlankExerciseNameSidePlankWithKneeTuck ((FITPlankExerciseName)78) +#define FITPlankExerciseNameWeightedSidePlankWithKneeTuck ((FITPlankExerciseName)79) +#define FITPlankExerciseNameSidePlankWithLegLift ((FITPlankExerciseName)80) +#define FITPlankExerciseNameWeightedSidePlankWithLegLift ((FITPlankExerciseName)81) +#define FITPlankExerciseNameSidePlankWithReachUnder ((FITPlankExerciseName)82) +#define FITPlankExerciseNameWeightedSidePlankWithReachUnder ((FITPlankExerciseName)83) +#define FITPlankExerciseNameSingleLegElevatedFeetPlank ((FITPlankExerciseName)84) +#define FITPlankExerciseNameWeightedSingleLegElevatedFeetPlank ((FITPlankExerciseName)85) +#define FITPlankExerciseNameSingleLegFlexAndExtend ((FITPlankExerciseName)86) +#define FITPlankExerciseNameWeightedSingleLegFlexAndExtend ((FITPlankExerciseName)87) +#define FITPlankExerciseNameSingleLegSidePlank ((FITPlankExerciseName)88) +#define FITPlankExerciseNameWeightedSingleLegSidePlank ((FITPlankExerciseName)89) +#define FITPlankExerciseNameSpidermanPlank ((FITPlankExerciseName)90) +#define FITPlankExerciseNameWeightedSpidermanPlank ((FITPlankExerciseName)91) +#define FITPlankExerciseNameStraightArmPlank ((FITPlankExerciseName)92) +#define FITPlankExerciseNameWeightedStraightArmPlank ((FITPlankExerciseName)93) +#define FITPlankExerciseNameStraightArmPlankWithShoulderTouch ((FITPlankExerciseName)94) +#define FITPlankExerciseNameWeightedStraightArmPlankWithShoulderTouch ((FITPlankExerciseName)95) +#define FITPlankExerciseNameSwissBallPlank ((FITPlankExerciseName)96) +#define FITPlankExerciseNameWeightedSwissBallPlank ((FITPlankExerciseName)97) +#define FITPlankExerciseNameSwissBallPlankLegLift ((FITPlankExerciseName)98) +#define FITPlankExerciseNameWeightedSwissBallPlankLegLift ((FITPlankExerciseName)99) +#define FITPlankExerciseNameSwissBallPlankLegLiftAndHold ((FITPlankExerciseName)100) +#define FITPlankExerciseNameSwissBallPlankWithFeetOnBench ((FITPlankExerciseName)101) +#define FITPlankExerciseNameWeightedSwissBallPlankWithFeetOnBench ((FITPlankExerciseName)102) +#define FITPlankExerciseNameSwissBallProneJackknife ((FITPlankExerciseName)103) +#define FITPlankExerciseNameWeightedSwissBallProneJackknife ((FITPlankExerciseName)104) +#define FITPlankExerciseNameSwissBallSidePlank ((FITPlankExerciseName)105) +#define FITPlankExerciseNameWeightedSwissBallSidePlank ((FITPlankExerciseName)106) +#define FITPlankExerciseNameThreeWayPlank ((FITPlankExerciseName)107) +#define FITPlankExerciseNameWeightedThreeWayPlank ((FITPlankExerciseName)108) +#define FITPlankExerciseNameTowelPlankAndKneeIn ((FITPlankExerciseName)109) +#define FITPlankExerciseNameWeightedTowelPlankAndKneeIn ((FITPlankExerciseName)110) +#define FITPlankExerciseNameTStabilization ((FITPlankExerciseName)111) +#define FITPlankExerciseNameWeightedTStabilization ((FITPlankExerciseName)112) +#define FITPlankExerciseNameTurkishGetUpToSidePlank ((FITPlankExerciseName)113) +#define FITPlankExerciseNameWeightedTurkishGetUpToSidePlank ((FITPlankExerciseName)114) +#define FITPlankExerciseNameTwoPointPlank ((FITPlankExerciseName)115) +#define FITPlankExerciseNameWeightedTwoPointPlank ((FITPlankExerciseName)116) +#define FITPlankExerciseNameWeightedPlank ((FITPlankExerciseName)117) +#define FITPlankExerciseNameWideStancePlankWithDiagonalArmLift ((FITPlankExerciseName)118) +#define FITPlankExerciseNameWeightedWideStancePlankWithDiagonalArmLift ((FITPlankExerciseName)119) +#define FITPlankExerciseNameWideStancePlankWithDiagonalLegLift ((FITPlankExerciseName)120) +#define FITPlankExerciseNameWeightedWideStancePlankWithDiagonalLegLift ((FITPlankExerciseName)121) +#define FITPlankExerciseNameWideStancePlankWithLegLift ((FITPlankExerciseName)122) +#define FITPlankExerciseNameWeightedWideStancePlankWithLegLift ((FITPlankExerciseName)123) +#define FITPlankExerciseNameWideStancePlankWithOppositeArmAndLegLift ((FITPlankExerciseName)124) +#define FITPlankExerciseNameWeightedMountainClimberWithHandsOnBench ((FITPlankExerciseName)125) +#define FITPlankExerciseNameWeightedSwissBallPlankLegLiftAndHold ((FITPlankExerciseName)126) +#define FITPlankExerciseNameWeightedWideStancePlankWithOppositeArmAndLegLift ((FITPlankExerciseName)127) +#define FITPlankExerciseNamePlankWithFeetOnSwissBall ((FITPlankExerciseName)128) +#define FITPlankExerciseNameSidePlankToPlankWithReachUnder ((FITPlankExerciseName)129) +#define FITPlankExerciseNameBridgeWithGluteLowerLift ((FITPlankExerciseName)130) +#define FITPlankExerciseNameBridgeOneLegBridge ((FITPlankExerciseName)131) +#define FITPlankExerciseNamePlankWithArmVariations ((FITPlankExerciseName)132) +#define FITPlankExerciseNamePlankWithLegLift ((FITPlankExerciseName)133) +#define FITPlankExerciseNameReversePlankWithLegPull ((FITPlankExerciseName)134) +#define FITPlankExerciseNameCount 135 + +typedef FITUInt16 FITPlyoExerciseName; +#define FITPlyoExerciseNameInvalid FITUInt16Invalid +#define FITPlyoExerciseNameAlternatingJumpLunge ((FITPlyoExerciseName)0) +#define FITPlyoExerciseNameWeightedAlternatingJumpLunge ((FITPlyoExerciseName)1) +#define FITPlyoExerciseNameBarbellJumpSquat ((FITPlyoExerciseName)2) +#define FITPlyoExerciseNameBodyWeightJumpSquat ((FITPlyoExerciseName)3) +#define FITPlyoExerciseNameWeightedJumpSquat ((FITPlyoExerciseName)4) +#define FITPlyoExerciseNameCrossKneeStrike ((FITPlyoExerciseName)5) +#define FITPlyoExerciseNameWeightedCrossKneeStrike ((FITPlyoExerciseName)6) +#define FITPlyoExerciseNameDepthJump ((FITPlyoExerciseName)7) +#define FITPlyoExerciseNameWeightedDepthJump ((FITPlyoExerciseName)8) +#define FITPlyoExerciseNameDumbbellJumpSquat ((FITPlyoExerciseName)9) +#define FITPlyoExerciseNameDumbbellSplitJump ((FITPlyoExerciseName)10) +#define FITPlyoExerciseNameFrontKneeStrike ((FITPlyoExerciseName)11) +#define FITPlyoExerciseNameWeightedFrontKneeStrike ((FITPlyoExerciseName)12) +#define FITPlyoExerciseNameHighBoxJump ((FITPlyoExerciseName)13) +#define FITPlyoExerciseNameWeightedHighBoxJump ((FITPlyoExerciseName)14) +#define FITPlyoExerciseNameIsometricExplosiveBodyWeightJumpSquat ((FITPlyoExerciseName)15) +#define FITPlyoExerciseNameWeightedIsometricExplosiveJumpSquat ((FITPlyoExerciseName)16) +#define FITPlyoExerciseNameLateralLeapAndHop ((FITPlyoExerciseName)17) +#define FITPlyoExerciseNameWeightedLateralLeapAndHop ((FITPlyoExerciseName)18) +#define FITPlyoExerciseNameLateralPlyoSquats ((FITPlyoExerciseName)19) +#define FITPlyoExerciseNameWeightedLateralPlyoSquats ((FITPlyoExerciseName)20) +#define FITPlyoExerciseNameLateralSlide ((FITPlyoExerciseName)21) +#define FITPlyoExerciseNameWeightedLateralSlide ((FITPlyoExerciseName)22) +#define FITPlyoExerciseNameMedicineBallOverheadThrows ((FITPlyoExerciseName)23) +#define FITPlyoExerciseNameMedicineBallSideThrow ((FITPlyoExerciseName)24) +#define FITPlyoExerciseNameMedicineBallSlam ((FITPlyoExerciseName)25) +#define FITPlyoExerciseNameSideToSideMedicineBallThrows ((FITPlyoExerciseName)26) +#define FITPlyoExerciseNameSideToSideShuffleJump ((FITPlyoExerciseName)27) +#define FITPlyoExerciseNameWeightedSideToSideShuffleJump ((FITPlyoExerciseName)28) +#define FITPlyoExerciseNameSquatJumpOntoBox ((FITPlyoExerciseName)29) +#define FITPlyoExerciseNameWeightedSquatJumpOntoBox ((FITPlyoExerciseName)30) +#define FITPlyoExerciseNameSquatJumpsInAndOut ((FITPlyoExerciseName)31) +#define FITPlyoExerciseNameWeightedSquatJumpsInAndOut ((FITPlyoExerciseName)32) +#define FITPlyoExerciseNameCount 33 + +typedef FITUInt16 FITPullUpExerciseName; +#define FITPullUpExerciseNameInvalid FITUInt16Invalid +#define FITPullUpExerciseNameBandedPullUps ((FITPullUpExerciseName)0) +#define FITPullUpExerciseName30DegreeLatPulldown ((FITPullUpExerciseName)1) +#define FITPullUpExerciseNameBandAssistedChinUp ((FITPullUpExerciseName)2) +#define FITPullUpExerciseNameCloseGripChinUp ((FITPullUpExerciseName)3) +#define FITPullUpExerciseNameWeightedCloseGripChinUp ((FITPullUpExerciseName)4) +#define FITPullUpExerciseNameCloseGripLatPulldown ((FITPullUpExerciseName)5) +#define FITPullUpExerciseNameCrossoverChinUp ((FITPullUpExerciseName)6) +#define FITPullUpExerciseNameWeightedCrossoverChinUp ((FITPullUpExerciseName)7) +#define FITPullUpExerciseNameEzBarPullover ((FITPullUpExerciseName)8) +#define FITPullUpExerciseNameHangingHurdle ((FITPullUpExerciseName)9) +#define FITPullUpExerciseNameWeightedHangingHurdle ((FITPullUpExerciseName)10) +#define FITPullUpExerciseNameKneelingLatPulldown ((FITPullUpExerciseName)11) +#define FITPullUpExerciseNameKneelingUnderhandGripLatPulldown ((FITPullUpExerciseName)12) +#define FITPullUpExerciseNameLatPulldown ((FITPullUpExerciseName)13) +#define FITPullUpExerciseNameMixedGripChinUp ((FITPullUpExerciseName)14) +#define FITPullUpExerciseNameWeightedMixedGripChinUp ((FITPullUpExerciseName)15) +#define FITPullUpExerciseNameMixedGripPullUp ((FITPullUpExerciseName)16) +#define FITPullUpExerciseNameWeightedMixedGripPullUp ((FITPullUpExerciseName)17) +#define FITPullUpExerciseNameReverseGripPulldown ((FITPullUpExerciseName)18) +#define FITPullUpExerciseNameStandingCablePullover ((FITPullUpExerciseName)19) +#define FITPullUpExerciseNameStraightArmPulldown ((FITPullUpExerciseName)20) +#define FITPullUpExerciseNameSwissBallEzBarPullover ((FITPullUpExerciseName)21) +#define FITPullUpExerciseNameTowelPullUp ((FITPullUpExerciseName)22) +#define FITPullUpExerciseNameWeightedTowelPullUp ((FITPullUpExerciseName)23) +#define FITPullUpExerciseNameWeightedPullUp ((FITPullUpExerciseName)24) +#define FITPullUpExerciseNameWideGripLatPulldown ((FITPullUpExerciseName)25) +#define FITPullUpExerciseNameWideGripPullUp ((FITPullUpExerciseName)26) +#define FITPullUpExerciseNameWeightedWideGripPullUp ((FITPullUpExerciseName)27) +#define FITPullUpExerciseNameBurpeePullUp ((FITPullUpExerciseName)28) +#define FITPullUpExerciseNameWeightedBurpeePullUp ((FITPullUpExerciseName)29) +#define FITPullUpExerciseNameJumpingPullUps ((FITPullUpExerciseName)30) +#define FITPullUpExerciseNameWeightedJumpingPullUps ((FITPullUpExerciseName)31) +#define FITPullUpExerciseNameKippingPullUp ((FITPullUpExerciseName)32) +#define FITPullUpExerciseNameWeightedKippingPullUp ((FITPullUpExerciseName)33) +#define FITPullUpExerciseNameLPullUp ((FITPullUpExerciseName)34) +#define FITPullUpExerciseNameWeightedLPullUp ((FITPullUpExerciseName)35) +#define FITPullUpExerciseNameSuspendedChinUp ((FITPullUpExerciseName)36) +#define FITPullUpExerciseNameWeightedSuspendedChinUp ((FITPullUpExerciseName)37) +#define FITPullUpExerciseNamePullUp ((FITPullUpExerciseName)38) +#define FITPullUpExerciseNameCount 39 + +typedef FITUInt16 FITPushUpExerciseName; +#define FITPushUpExerciseNameInvalid FITUInt16Invalid +#define FITPushUpExerciseNameChestPressWithBand ((FITPushUpExerciseName)0) +#define FITPushUpExerciseNameAlternatingStaggeredPushUp ((FITPushUpExerciseName)1) +#define FITPushUpExerciseNameWeightedAlternatingStaggeredPushUp ((FITPushUpExerciseName)2) +#define FITPushUpExerciseNameAlternatingHandsMedicineBallPushUp ((FITPushUpExerciseName)3) +#define FITPushUpExerciseNameWeightedAlternatingHandsMedicineBallPushUp ((FITPushUpExerciseName)4) +#define FITPushUpExerciseNameBosuBallPushUp ((FITPushUpExerciseName)5) +#define FITPushUpExerciseNameWeightedBosuBallPushUp ((FITPushUpExerciseName)6) +#define FITPushUpExerciseNameClappingPushUp ((FITPushUpExerciseName)7) +#define FITPushUpExerciseNameWeightedClappingPushUp ((FITPushUpExerciseName)8) +#define FITPushUpExerciseNameCloseGripMedicineBallPushUp ((FITPushUpExerciseName)9) +#define FITPushUpExerciseNameWeightedCloseGripMedicineBallPushUp ((FITPushUpExerciseName)10) +#define FITPushUpExerciseNameCloseHandsPushUp ((FITPushUpExerciseName)11) +#define FITPushUpExerciseNameWeightedCloseHandsPushUp ((FITPushUpExerciseName)12) +#define FITPushUpExerciseNameDeclinePushUp ((FITPushUpExerciseName)13) +#define FITPushUpExerciseNameWeightedDeclinePushUp ((FITPushUpExerciseName)14) +#define FITPushUpExerciseNameDiamondPushUp ((FITPushUpExerciseName)15) +#define FITPushUpExerciseNameWeightedDiamondPushUp ((FITPushUpExerciseName)16) +#define FITPushUpExerciseNameExplosiveCrossoverPushUp ((FITPushUpExerciseName)17) +#define FITPushUpExerciseNameWeightedExplosiveCrossoverPushUp ((FITPushUpExerciseName)18) +#define FITPushUpExerciseNameExplosivePushUp ((FITPushUpExerciseName)19) +#define FITPushUpExerciseNameWeightedExplosivePushUp ((FITPushUpExerciseName)20) +#define FITPushUpExerciseNameFeetElevatedSideToSidePushUp ((FITPushUpExerciseName)21) +#define FITPushUpExerciseNameWeightedFeetElevatedSideToSidePushUp ((FITPushUpExerciseName)22) +#define FITPushUpExerciseNameHandReleasePushUp ((FITPushUpExerciseName)23) +#define FITPushUpExerciseNameWeightedHandReleasePushUp ((FITPushUpExerciseName)24) +#define FITPushUpExerciseNameHandstandPushUp ((FITPushUpExerciseName)25) +#define FITPushUpExerciseNameWeightedHandstandPushUp ((FITPushUpExerciseName)26) +#define FITPushUpExerciseNameInclinePushUp ((FITPushUpExerciseName)27) +#define FITPushUpExerciseNameWeightedInclinePushUp ((FITPushUpExerciseName)28) +#define FITPushUpExerciseNameIsometricExplosivePushUp ((FITPushUpExerciseName)29) +#define FITPushUpExerciseNameWeightedIsometricExplosivePushUp ((FITPushUpExerciseName)30) +#define FITPushUpExerciseNameJudoPushUp ((FITPushUpExerciseName)31) +#define FITPushUpExerciseNameWeightedJudoPushUp ((FITPushUpExerciseName)32) +#define FITPushUpExerciseNameKneelingPushUp ((FITPushUpExerciseName)33) +#define FITPushUpExerciseNameWeightedKneelingPushUp ((FITPushUpExerciseName)34) +#define FITPushUpExerciseNameMedicineBallChestPass ((FITPushUpExerciseName)35) +#define FITPushUpExerciseNameMedicineBallPushUp ((FITPushUpExerciseName)36) +#define FITPushUpExerciseNameWeightedMedicineBallPushUp ((FITPushUpExerciseName)37) +#define FITPushUpExerciseNameOneArmPushUp ((FITPushUpExerciseName)38) +#define FITPushUpExerciseNameWeightedOneArmPushUp ((FITPushUpExerciseName)39) +#define FITPushUpExerciseNameWeightedPushUp ((FITPushUpExerciseName)40) +#define FITPushUpExerciseNamePushUpAndRow ((FITPushUpExerciseName)41) +#define FITPushUpExerciseNameWeightedPushUpAndRow ((FITPushUpExerciseName)42) +#define FITPushUpExerciseNamePushUpPlus ((FITPushUpExerciseName)43) +#define FITPushUpExerciseNameWeightedPushUpPlus ((FITPushUpExerciseName)44) +#define FITPushUpExerciseNamePushUpWithFeetOnSwissBall ((FITPushUpExerciseName)45) +#define FITPushUpExerciseNameWeightedPushUpWithFeetOnSwissBall ((FITPushUpExerciseName)46) +#define FITPushUpExerciseNamePushUpWithOneHandOnMedicineBall ((FITPushUpExerciseName)47) +#define FITPushUpExerciseNameWeightedPushUpWithOneHandOnMedicineBall ((FITPushUpExerciseName)48) +#define FITPushUpExerciseNameShoulderPushUp ((FITPushUpExerciseName)49) +#define FITPushUpExerciseNameWeightedShoulderPushUp ((FITPushUpExerciseName)50) +#define FITPushUpExerciseNameSingleArmMedicineBallPushUp ((FITPushUpExerciseName)51) +#define FITPushUpExerciseNameWeightedSingleArmMedicineBallPushUp ((FITPushUpExerciseName)52) +#define FITPushUpExerciseNameSpidermanPushUp ((FITPushUpExerciseName)53) +#define FITPushUpExerciseNameWeightedSpidermanPushUp ((FITPushUpExerciseName)54) +#define FITPushUpExerciseNameStackedFeetPushUp ((FITPushUpExerciseName)55) +#define FITPushUpExerciseNameWeightedStackedFeetPushUp ((FITPushUpExerciseName)56) +#define FITPushUpExerciseNameStaggeredHandsPushUp ((FITPushUpExerciseName)57) +#define FITPushUpExerciseNameWeightedStaggeredHandsPushUp ((FITPushUpExerciseName)58) +#define FITPushUpExerciseNameSuspendedPushUp ((FITPushUpExerciseName)59) +#define FITPushUpExerciseNameWeightedSuspendedPushUp ((FITPushUpExerciseName)60) +#define FITPushUpExerciseNameSwissBallPushUp ((FITPushUpExerciseName)61) +#define FITPushUpExerciseNameWeightedSwissBallPushUp ((FITPushUpExerciseName)62) +#define FITPushUpExerciseNameSwissBallPushUpPlus ((FITPushUpExerciseName)63) +#define FITPushUpExerciseNameWeightedSwissBallPushUpPlus ((FITPushUpExerciseName)64) +#define FITPushUpExerciseNameTPushUp ((FITPushUpExerciseName)65) +#define FITPushUpExerciseNameWeightedTPushUp ((FITPushUpExerciseName)66) +#define FITPushUpExerciseNameTripleStopPushUp ((FITPushUpExerciseName)67) +#define FITPushUpExerciseNameWeightedTripleStopPushUp ((FITPushUpExerciseName)68) +#define FITPushUpExerciseNameWideHandsPushUp ((FITPushUpExerciseName)69) +#define FITPushUpExerciseNameWeightedWideHandsPushUp ((FITPushUpExerciseName)70) +#define FITPushUpExerciseNameParalletteHandstandPushUp ((FITPushUpExerciseName)71) +#define FITPushUpExerciseNameWeightedParalletteHandstandPushUp ((FITPushUpExerciseName)72) +#define FITPushUpExerciseNameRingHandstandPushUp ((FITPushUpExerciseName)73) +#define FITPushUpExerciseNameWeightedRingHandstandPushUp ((FITPushUpExerciseName)74) +#define FITPushUpExerciseNameRingPushUp ((FITPushUpExerciseName)75) +#define FITPushUpExerciseNameWeightedRingPushUp ((FITPushUpExerciseName)76) +#define FITPushUpExerciseNamePushUp ((FITPushUpExerciseName)77) +#define FITPushUpExerciseNamePilatesPushup ((FITPushUpExerciseName)78) +#define FITPushUpExerciseNameCount 79 + +typedef FITUInt16 FITRowExerciseName; +#define FITRowExerciseNameInvalid FITUInt16Invalid +#define FITRowExerciseNameBarbellStraightLegDeadliftToRow ((FITRowExerciseName)0) +#define FITRowExerciseNameCableRowStanding ((FITRowExerciseName)1) +#define FITRowExerciseNameDumbbellRow ((FITRowExerciseName)2) +#define FITRowExerciseNameElevatedFeetInvertedRow ((FITRowExerciseName)3) +#define FITRowExerciseNameWeightedElevatedFeetInvertedRow ((FITRowExerciseName)4) +#define FITRowExerciseNameFacePull ((FITRowExerciseName)5) +#define FITRowExerciseNameFacePullWithExternalRotation ((FITRowExerciseName)6) +#define FITRowExerciseNameInvertedRowWithFeetOnSwissBall ((FITRowExerciseName)7) +#define FITRowExerciseNameWeightedInvertedRowWithFeetOnSwissBall ((FITRowExerciseName)8) +#define FITRowExerciseNameKettlebellRow ((FITRowExerciseName)9) +#define FITRowExerciseNameModifiedInvertedRow ((FITRowExerciseName)10) +#define FITRowExerciseNameWeightedModifiedInvertedRow ((FITRowExerciseName)11) +#define FITRowExerciseNameNeutralGripAlternatingDumbbellRow ((FITRowExerciseName)12) +#define FITRowExerciseNameOneArmBentOverRow ((FITRowExerciseName)13) +#define FITRowExerciseNameOneLeggedDumbbellRow ((FITRowExerciseName)14) +#define FITRowExerciseNameRenegadeRow ((FITRowExerciseName)15) +#define FITRowExerciseNameReverseGripBarbellRow ((FITRowExerciseName)16) +#define FITRowExerciseNameRopeHandleCableRow ((FITRowExerciseName)17) +#define FITRowExerciseNameSeatedCableRow ((FITRowExerciseName)18) +#define FITRowExerciseNameSeatedDumbbellRow ((FITRowExerciseName)19) +#define FITRowExerciseNameSingleArmCableRow ((FITRowExerciseName)20) +#define FITRowExerciseNameSingleArmCableRowAndRotation ((FITRowExerciseName)21) +#define FITRowExerciseNameSingleArmInvertedRow ((FITRowExerciseName)22) +#define FITRowExerciseNameWeightedSingleArmInvertedRow ((FITRowExerciseName)23) +#define FITRowExerciseNameSingleArmNeutralGripDumbbellRow ((FITRowExerciseName)24) +#define FITRowExerciseNameSingleArmNeutralGripDumbbellRowAndRotation ((FITRowExerciseName)25) +#define FITRowExerciseNameSuspendedInvertedRow ((FITRowExerciseName)26) +#define FITRowExerciseNameWeightedSuspendedInvertedRow ((FITRowExerciseName)27) +#define FITRowExerciseNameTBarRow ((FITRowExerciseName)28) +#define FITRowExerciseNameTowelGripInvertedRow ((FITRowExerciseName)29) +#define FITRowExerciseNameWeightedTowelGripInvertedRow ((FITRowExerciseName)30) +#define FITRowExerciseNameUnderhandGripCableRow ((FITRowExerciseName)31) +#define FITRowExerciseNameVGripCableRow ((FITRowExerciseName)32) +#define FITRowExerciseNameWideGripSeatedCableRow ((FITRowExerciseName)33) +#define FITRowExerciseNameCount 34 + +typedef FITUInt16 FITShoulderPressExerciseName; +#define FITShoulderPressExerciseNameInvalid FITUInt16Invalid +#define FITShoulderPressExerciseNameAlternatingDumbbellShoulderPress ((FITShoulderPressExerciseName)0) +#define FITShoulderPressExerciseNameArnoldPress ((FITShoulderPressExerciseName)1) +#define FITShoulderPressExerciseNameBarbellFrontSquatToPushPress ((FITShoulderPressExerciseName)2) +#define FITShoulderPressExerciseNameBarbellPushPress ((FITShoulderPressExerciseName)3) +#define FITShoulderPressExerciseNameBarbellShoulderPress ((FITShoulderPressExerciseName)4) +#define FITShoulderPressExerciseNameDeadCurlPress ((FITShoulderPressExerciseName)5) +#define FITShoulderPressExerciseNameDumbbellAlternatingShoulderPressAndTwist ((FITShoulderPressExerciseName)6) +#define FITShoulderPressExerciseNameDumbbellHammerCurlToLungeToPress ((FITShoulderPressExerciseName)7) +#define FITShoulderPressExerciseNameDumbbellPushPress ((FITShoulderPressExerciseName)8) +#define FITShoulderPressExerciseNameFloorInvertedShoulderPress ((FITShoulderPressExerciseName)9) +#define FITShoulderPressExerciseNameWeightedFloorInvertedShoulderPress ((FITShoulderPressExerciseName)10) +#define FITShoulderPressExerciseNameInvertedShoulderPress ((FITShoulderPressExerciseName)11) +#define FITShoulderPressExerciseNameWeightedInvertedShoulderPress ((FITShoulderPressExerciseName)12) +#define FITShoulderPressExerciseNameOneArmPushPress ((FITShoulderPressExerciseName)13) +#define FITShoulderPressExerciseNameOverheadBarbellPress ((FITShoulderPressExerciseName)14) +#define FITShoulderPressExerciseNameOverheadDumbbellPress ((FITShoulderPressExerciseName)15) +#define FITShoulderPressExerciseNameSeatedBarbellShoulderPress ((FITShoulderPressExerciseName)16) +#define FITShoulderPressExerciseNameSeatedDumbbellShoulderPress ((FITShoulderPressExerciseName)17) +#define FITShoulderPressExerciseNameSingleArmDumbbellShoulderPress ((FITShoulderPressExerciseName)18) +#define FITShoulderPressExerciseNameSingleArmStepUpAndPress ((FITShoulderPressExerciseName)19) +#define FITShoulderPressExerciseNameSmithMachineOverheadPress ((FITShoulderPressExerciseName)20) +#define FITShoulderPressExerciseNameSplitStanceHammerCurlToPress ((FITShoulderPressExerciseName)21) +#define FITShoulderPressExerciseNameSwissBallDumbbellShoulderPress ((FITShoulderPressExerciseName)22) +#define FITShoulderPressExerciseNameWeightPlateFrontRaise ((FITShoulderPressExerciseName)23) +#define FITShoulderPressExerciseNameCount 24 + +typedef FITUInt16 FITShoulderStabilityExerciseName; +#define FITShoulderStabilityExerciseNameInvalid FITUInt16Invalid +#define FITShoulderStabilityExerciseName90DegreeCableExternalRotation ((FITShoulderStabilityExerciseName)0) +#define FITShoulderStabilityExerciseNameBandExternalRotation ((FITShoulderStabilityExerciseName)1) +#define FITShoulderStabilityExerciseNameBandInternalRotation ((FITShoulderStabilityExerciseName)2) +#define FITShoulderStabilityExerciseNameBentArmLateralRaiseAndExternalRotation ((FITShoulderStabilityExerciseName)3) +#define FITShoulderStabilityExerciseNameCableExternalRotation ((FITShoulderStabilityExerciseName)4) +#define FITShoulderStabilityExerciseNameDumbbellFacePullWithExternalRotation ((FITShoulderStabilityExerciseName)5) +#define FITShoulderStabilityExerciseNameFloorIRaise ((FITShoulderStabilityExerciseName)6) +#define FITShoulderStabilityExerciseNameWeightedFloorIRaise ((FITShoulderStabilityExerciseName)7) +#define FITShoulderStabilityExerciseNameFloorTRaise ((FITShoulderStabilityExerciseName)8) +#define FITShoulderStabilityExerciseNameWeightedFloorTRaise ((FITShoulderStabilityExerciseName)9) +#define FITShoulderStabilityExerciseNameFloorYRaise ((FITShoulderStabilityExerciseName)10) +#define FITShoulderStabilityExerciseNameWeightedFloorYRaise ((FITShoulderStabilityExerciseName)11) +#define FITShoulderStabilityExerciseNameInclineIRaise ((FITShoulderStabilityExerciseName)12) +#define FITShoulderStabilityExerciseNameWeightedInclineIRaise ((FITShoulderStabilityExerciseName)13) +#define FITShoulderStabilityExerciseNameInclineLRaise ((FITShoulderStabilityExerciseName)14) +#define FITShoulderStabilityExerciseNameWeightedInclineLRaise ((FITShoulderStabilityExerciseName)15) +#define FITShoulderStabilityExerciseNameInclineTRaise ((FITShoulderStabilityExerciseName)16) +#define FITShoulderStabilityExerciseNameWeightedInclineTRaise ((FITShoulderStabilityExerciseName)17) +#define FITShoulderStabilityExerciseNameInclineWRaise ((FITShoulderStabilityExerciseName)18) +#define FITShoulderStabilityExerciseNameWeightedInclineWRaise ((FITShoulderStabilityExerciseName)19) +#define FITShoulderStabilityExerciseNameInclineYRaise ((FITShoulderStabilityExerciseName)20) +#define FITShoulderStabilityExerciseNameWeightedInclineYRaise ((FITShoulderStabilityExerciseName)21) +#define FITShoulderStabilityExerciseNameLyingExternalRotation ((FITShoulderStabilityExerciseName)22) +#define FITShoulderStabilityExerciseNameSeatedDumbbellExternalRotation ((FITShoulderStabilityExerciseName)23) +#define FITShoulderStabilityExerciseNameStandingLRaise ((FITShoulderStabilityExerciseName)24) +#define FITShoulderStabilityExerciseNameSwissBallIRaise ((FITShoulderStabilityExerciseName)25) +#define FITShoulderStabilityExerciseNameWeightedSwissBallIRaise ((FITShoulderStabilityExerciseName)26) +#define FITShoulderStabilityExerciseNameSwissBallTRaise ((FITShoulderStabilityExerciseName)27) +#define FITShoulderStabilityExerciseNameWeightedSwissBallTRaise ((FITShoulderStabilityExerciseName)28) +#define FITShoulderStabilityExerciseNameSwissBallWRaise ((FITShoulderStabilityExerciseName)29) +#define FITShoulderStabilityExerciseNameWeightedSwissBallWRaise ((FITShoulderStabilityExerciseName)30) +#define FITShoulderStabilityExerciseNameSwissBallYRaise ((FITShoulderStabilityExerciseName)31) +#define FITShoulderStabilityExerciseNameWeightedSwissBallYRaise ((FITShoulderStabilityExerciseName)32) +#define FITShoulderStabilityExerciseNameCount 33 + +typedef FITUInt16 FITShrugExerciseName; +#define FITShrugExerciseNameInvalid FITUInt16Invalid +#define FITShrugExerciseNameBarbellJumpShrug ((FITShrugExerciseName)0) +#define FITShrugExerciseNameBarbellShrug ((FITShrugExerciseName)1) +#define FITShrugExerciseNameBarbellUprightRow ((FITShrugExerciseName)2) +#define FITShrugExerciseNameBehindTheBackSmithMachineShrug ((FITShrugExerciseName)3) +#define FITShrugExerciseNameDumbbellJumpShrug ((FITShrugExerciseName)4) +#define FITShrugExerciseNameDumbbellShrug ((FITShrugExerciseName)5) +#define FITShrugExerciseNameDumbbellUprightRow ((FITShrugExerciseName)6) +#define FITShrugExerciseNameInclineDumbbellShrug ((FITShrugExerciseName)7) +#define FITShrugExerciseNameOverheadBarbellShrug ((FITShrugExerciseName)8) +#define FITShrugExerciseNameOverheadDumbbellShrug ((FITShrugExerciseName)9) +#define FITShrugExerciseNameScaptionAndShrug ((FITShrugExerciseName)10) +#define FITShrugExerciseNameScapularRetraction ((FITShrugExerciseName)11) +#define FITShrugExerciseNameSerratusChairShrug ((FITShrugExerciseName)12) +#define FITShrugExerciseNameWeightedSerratusChairShrug ((FITShrugExerciseName)13) +#define FITShrugExerciseNameSerratusShrug ((FITShrugExerciseName)14) +#define FITShrugExerciseNameWeightedSerratusShrug ((FITShrugExerciseName)15) +#define FITShrugExerciseNameWideGripJumpShrug ((FITShrugExerciseName)16) +#define FITShrugExerciseNameCount 17 + +typedef FITUInt16 FITSitUpExerciseName; +#define FITSitUpExerciseNameInvalid FITUInt16Invalid +#define FITSitUpExerciseNameAlternatingSitUp ((FITSitUpExerciseName)0) +#define FITSitUpExerciseNameWeightedAlternatingSitUp ((FITSitUpExerciseName)1) +#define FITSitUpExerciseNameBentKneeVUp ((FITSitUpExerciseName)2) +#define FITSitUpExerciseNameWeightedBentKneeVUp ((FITSitUpExerciseName)3) +#define FITSitUpExerciseNameButterflySitUp ((FITSitUpExerciseName)4) +#define FITSitUpExerciseNameWeightedButterflySitup ((FITSitUpExerciseName)5) +#define FITSitUpExerciseNameCrossPunchRollUp ((FITSitUpExerciseName)6) +#define FITSitUpExerciseNameWeightedCrossPunchRollUp ((FITSitUpExerciseName)7) +#define FITSitUpExerciseNameCrossedArmsSitUp ((FITSitUpExerciseName)8) +#define FITSitUpExerciseNameWeightedCrossedArmsSitUp ((FITSitUpExerciseName)9) +#define FITSitUpExerciseNameGetUpSitUp ((FITSitUpExerciseName)10) +#define FITSitUpExerciseNameWeightedGetUpSitUp ((FITSitUpExerciseName)11) +#define FITSitUpExerciseNameHoveringSitUp ((FITSitUpExerciseName)12) +#define FITSitUpExerciseNameWeightedHoveringSitUp ((FITSitUpExerciseName)13) +#define FITSitUpExerciseNameKettlebellSitUp ((FITSitUpExerciseName)14) +#define FITSitUpExerciseNameMedicineBallAlternatingVUp ((FITSitUpExerciseName)15) +#define FITSitUpExerciseNameMedicineBallSitUp ((FITSitUpExerciseName)16) +#define FITSitUpExerciseNameMedicineBallVUp ((FITSitUpExerciseName)17) +#define FITSitUpExerciseNameModifiedSitUp ((FITSitUpExerciseName)18) +#define FITSitUpExerciseNameNegativeSitUp ((FITSitUpExerciseName)19) +#define FITSitUpExerciseNameOneArmFullSitUp ((FITSitUpExerciseName)20) +#define FITSitUpExerciseNameRecliningCircle ((FITSitUpExerciseName)21) +#define FITSitUpExerciseNameWeightedRecliningCircle ((FITSitUpExerciseName)22) +#define FITSitUpExerciseNameReverseCurlUp ((FITSitUpExerciseName)23) +#define FITSitUpExerciseNameWeightedReverseCurlUp ((FITSitUpExerciseName)24) +#define FITSitUpExerciseNameSingleLegSwissBallJackknife ((FITSitUpExerciseName)25) +#define FITSitUpExerciseNameWeightedSingleLegSwissBallJackknife ((FITSitUpExerciseName)26) +#define FITSitUpExerciseNameTheTeaser ((FITSitUpExerciseName)27) +#define FITSitUpExerciseNameTheTeaserWeighted ((FITSitUpExerciseName)28) +#define FITSitUpExerciseNameThreePartRollDown ((FITSitUpExerciseName)29) +#define FITSitUpExerciseNameWeightedThreePartRollDown ((FITSitUpExerciseName)30) +#define FITSitUpExerciseNameVUp ((FITSitUpExerciseName)31) +#define FITSitUpExerciseNameWeightedVUp ((FITSitUpExerciseName)32) +#define FITSitUpExerciseNameWeightedRussianTwistOnSwissBall ((FITSitUpExerciseName)33) +#define FITSitUpExerciseNameWeightedSitUp ((FITSitUpExerciseName)34) +#define FITSitUpExerciseNameXAbs ((FITSitUpExerciseName)35) +#define FITSitUpExerciseNameWeightedXAbs ((FITSitUpExerciseName)36) +#define FITSitUpExerciseNameSitUp ((FITSitUpExerciseName)37) +#define FITSitUpExerciseNameCount 38 + +typedef FITUInt16 FITSquatExerciseName; +#define FITSquatExerciseNameInvalid FITUInt16Invalid +#define FITSquatExerciseNameLegPress ((FITSquatExerciseName)0) +#define FITSquatExerciseNameBackSquatWithBodyBar ((FITSquatExerciseName)1) +#define FITSquatExerciseNameBackSquats ((FITSquatExerciseName)2) +#define FITSquatExerciseNameWeightedBackSquats ((FITSquatExerciseName)3) +#define FITSquatExerciseNameBalancingSquat ((FITSquatExerciseName)4) +#define FITSquatExerciseNameWeightedBalancingSquat ((FITSquatExerciseName)5) +#define FITSquatExerciseNameBarbellBackSquat ((FITSquatExerciseName)6) +#define FITSquatExerciseNameBarbellBoxSquat ((FITSquatExerciseName)7) +#define FITSquatExerciseNameBarbellFrontSquat ((FITSquatExerciseName)8) +#define FITSquatExerciseNameBarbellHackSquat ((FITSquatExerciseName)9) +#define FITSquatExerciseNameBarbellHangSquatSnatch ((FITSquatExerciseName)10) +#define FITSquatExerciseNameBarbellLateralStepUp ((FITSquatExerciseName)11) +#define FITSquatExerciseNameBarbellQuarterSquat ((FITSquatExerciseName)12) +#define FITSquatExerciseNameBarbellSiffSquat ((FITSquatExerciseName)13) +#define FITSquatExerciseNameBarbellSquatSnatch ((FITSquatExerciseName)14) +#define FITSquatExerciseNameBarbellSquatWithHeelsRaised ((FITSquatExerciseName)15) +#define FITSquatExerciseNameBarbellStepover ((FITSquatExerciseName)16) +#define FITSquatExerciseNameBarbellStepUp ((FITSquatExerciseName)17) +#define FITSquatExerciseNameBenchSquatWithRotationalChop ((FITSquatExerciseName)18) +#define FITSquatExerciseNameWeightedBenchSquatWithRotationalChop ((FITSquatExerciseName)19) +#define FITSquatExerciseNameBodyWeightWallSquat ((FITSquatExerciseName)20) +#define FITSquatExerciseNameWeightedWallSquat ((FITSquatExerciseName)21) +#define FITSquatExerciseNameBoxStepSquat ((FITSquatExerciseName)22) +#define FITSquatExerciseNameWeightedBoxStepSquat ((FITSquatExerciseName)23) +#define FITSquatExerciseNameBracedSquat ((FITSquatExerciseName)24) +#define FITSquatExerciseNameCrossedArmBarbellFrontSquat ((FITSquatExerciseName)25) +#define FITSquatExerciseNameCrossoverDumbbellStepUp ((FITSquatExerciseName)26) +#define FITSquatExerciseNameDumbbellFrontSquat ((FITSquatExerciseName)27) +#define FITSquatExerciseNameDumbbellSplitSquat ((FITSquatExerciseName)28) +#define FITSquatExerciseNameDumbbellSquat ((FITSquatExerciseName)29) +#define FITSquatExerciseNameDumbbellSquatClean ((FITSquatExerciseName)30) +#define FITSquatExerciseNameDumbbellStepover ((FITSquatExerciseName)31) +#define FITSquatExerciseNameDumbbellStepUp ((FITSquatExerciseName)32) +#define FITSquatExerciseNameElevatedSingleLegSquat ((FITSquatExerciseName)33) +#define FITSquatExerciseNameWeightedElevatedSingleLegSquat ((FITSquatExerciseName)34) +#define FITSquatExerciseNameFigureFourSquats ((FITSquatExerciseName)35) +#define FITSquatExerciseNameWeightedFigureFourSquats ((FITSquatExerciseName)36) +#define FITSquatExerciseNameGobletSquat ((FITSquatExerciseName)37) +#define FITSquatExerciseNameKettlebellSquat ((FITSquatExerciseName)38) +#define FITSquatExerciseNameKettlebellSwingOverhead ((FITSquatExerciseName)39) +#define FITSquatExerciseNameKettlebellSwingWithFlipToSquat ((FITSquatExerciseName)40) +#define FITSquatExerciseNameLateralDumbbellStepUp ((FITSquatExerciseName)41) +#define FITSquatExerciseNameOneLeggedSquat ((FITSquatExerciseName)42) +#define FITSquatExerciseNameOverheadDumbbellSquat ((FITSquatExerciseName)43) +#define FITSquatExerciseNameOverheadSquat ((FITSquatExerciseName)44) +#define FITSquatExerciseNamePartialSingleLegSquat ((FITSquatExerciseName)45) +#define FITSquatExerciseNameWeightedPartialSingleLegSquat ((FITSquatExerciseName)46) +#define FITSquatExerciseNamePistolSquat ((FITSquatExerciseName)47) +#define FITSquatExerciseNameWeightedPistolSquat ((FITSquatExerciseName)48) +#define FITSquatExerciseNamePlieSlides ((FITSquatExerciseName)49) +#define FITSquatExerciseNameWeightedPlieSlides ((FITSquatExerciseName)50) +#define FITSquatExerciseNamePlieSquat ((FITSquatExerciseName)51) +#define FITSquatExerciseNameWeightedPlieSquat ((FITSquatExerciseName)52) +#define FITSquatExerciseNamePrisonerSquat ((FITSquatExerciseName)53) +#define FITSquatExerciseNameWeightedPrisonerSquat ((FITSquatExerciseName)54) +#define FITSquatExerciseNameSingleLegBenchGetUp ((FITSquatExerciseName)55) +#define FITSquatExerciseNameWeightedSingleLegBenchGetUp ((FITSquatExerciseName)56) +#define FITSquatExerciseNameSingleLegBenchSquat ((FITSquatExerciseName)57) +#define FITSquatExerciseNameWeightedSingleLegBenchSquat ((FITSquatExerciseName)58) +#define FITSquatExerciseNameSingleLegSquatOnSwissBall ((FITSquatExerciseName)59) +#define FITSquatExerciseNameWeightedSingleLegSquatOnSwissBall ((FITSquatExerciseName)60) +#define FITSquatExerciseNameSquat ((FITSquatExerciseName)61) +#define FITSquatExerciseNameWeightedSquat ((FITSquatExerciseName)62) +#define FITSquatExerciseNameSquatsWithBand ((FITSquatExerciseName)63) +#define FITSquatExerciseNameStaggeredSquat ((FITSquatExerciseName)64) +#define FITSquatExerciseNameWeightedStaggeredSquat ((FITSquatExerciseName)65) +#define FITSquatExerciseNameStepUp ((FITSquatExerciseName)66) +#define FITSquatExerciseNameWeightedStepUp ((FITSquatExerciseName)67) +#define FITSquatExerciseNameSuitcaseSquats ((FITSquatExerciseName)68) +#define FITSquatExerciseNameSumoSquat ((FITSquatExerciseName)69) +#define FITSquatExerciseNameSumoSquatSlideIn ((FITSquatExerciseName)70) +#define FITSquatExerciseNameWeightedSumoSquatSlideIn ((FITSquatExerciseName)71) +#define FITSquatExerciseNameSumoSquatToHighPull ((FITSquatExerciseName)72) +#define FITSquatExerciseNameSumoSquatToStand ((FITSquatExerciseName)73) +#define FITSquatExerciseNameWeightedSumoSquatToStand ((FITSquatExerciseName)74) +#define FITSquatExerciseNameSumoSquatWithRotation ((FITSquatExerciseName)75) +#define FITSquatExerciseNameWeightedSumoSquatWithRotation ((FITSquatExerciseName)76) +#define FITSquatExerciseNameSwissBallBodyWeightWallSquat ((FITSquatExerciseName)77) +#define FITSquatExerciseNameWeightedSwissBallWallSquat ((FITSquatExerciseName)78) +#define FITSquatExerciseNameThrusters ((FITSquatExerciseName)79) +#define FITSquatExerciseNameUnevenSquat ((FITSquatExerciseName)80) +#define FITSquatExerciseNameWeightedUnevenSquat ((FITSquatExerciseName)81) +#define FITSquatExerciseNameWaistSlimmingSquat ((FITSquatExerciseName)82) +#define FITSquatExerciseNameWallBall ((FITSquatExerciseName)83) +#define FITSquatExerciseNameWideStanceBarbellSquat ((FITSquatExerciseName)84) +#define FITSquatExerciseNameWideStanceGobletSquat ((FITSquatExerciseName)85) +#define FITSquatExerciseNameZercherSquat ((FITSquatExerciseName)86) +#define FITSquatExerciseNameKbsOverhead ((FITSquatExerciseName)87) // Deprecated do not use +#define FITSquatExerciseNameSquatAndSideKick ((FITSquatExerciseName)88) +#define FITSquatExerciseNameSquatJumpsInNOut ((FITSquatExerciseName)89) +#define FITSquatExerciseNamePilatesPlieSquatsParallelTurnedOutFlatAndHeels ((FITSquatExerciseName)90) +#define FITSquatExerciseNameReleveStraightLegAndKneeBentWithOneLegVariation ((FITSquatExerciseName)91) +#define FITSquatExerciseNameCount 92 + +typedef FITUInt16 FITTotalBodyExerciseName; +#define FITTotalBodyExerciseNameInvalid FITUInt16Invalid +#define FITTotalBodyExerciseNameBurpee ((FITTotalBodyExerciseName)0) +#define FITTotalBodyExerciseNameWeightedBurpee ((FITTotalBodyExerciseName)1) +#define FITTotalBodyExerciseNameBurpeeBoxJump ((FITTotalBodyExerciseName)2) +#define FITTotalBodyExerciseNameWeightedBurpeeBoxJump ((FITTotalBodyExerciseName)3) +#define FITTotalBodyExerciseNameHighPullBurpee ((FITTotalBodyExerciseName)4) +#define FITTotalBodyExerciseNameManMakers ((FITTotalBodyExerciseName)5) +#define FITTotalBodyExerciseNameOneArmBurpee ((FITTotalBodyExerciseName)6) +#define FITTotalBodyExerciseNameSquatThrusts ((FITTotalBodyExerciseName)7) +#define FITTotalBodyExerciseNameWeightedSquatThrusts ((FITTotalBodyExerciseName)8) +#define FITTotalBodyExerciseNameSquatPlankPushUp ((FITTotalBodyExerciseName)9) +#define FITTotalBodyExerciseNameWeightedSquatPlankPushUp ((FITTotalBodyExerciseName)10) +#define FITTotalBodyExerciseNameStandingTRotationBalance ((FITTotalBodyExerciseName)11) +#define FITTotalBodyExerciseNameWeightedStandingTRotationBalance ((FITTotalBodyExerciseName)12) +#define FITTotalBodyExerciseNameCount 13 + +typedef FITUInt16 FITTricepsExtensionExerciseName; +#define FITTricepsExtensionExerciseNameInvalid FITUInt16Invalid +#define FITTricepsExtensionExerciseNameBenchDip ((FITTricepsExtensionExerciseName)0) +#define FITTricepsExtensionExerciseNameWeightedBenchDip ((FITTricepsExtensionExerciseName)1) +#define FITTricepsExtensionExerciseNameBodyWeightDip ((FITTricepsExtensionExerciseName)2) +#define FITTricepsExtensionExerciseNameCableKickback ((FITTricepsExtensionExerciseName)3) +#define FITTricepsExtensionExerciseNameCableLyingTricepsExtension ((FITTricepsExtensionExerciseName)4) +#define FITTricepsExtensionExerciseNameCableOverheadTricepsExtension ((FITTricepsExtensionExerciseName)5) +#define FITTricepsExtensionExerciseNameDumbbellKickback ((FITTricepsExtensionExerciseName)6) +#define FITTricepsExtensionExerciseNameDumbbellLyingTricepsExtension ((FITTricepsExtensionExerciseName)7) +#define FITTricepsExtensionExerciseNameEzBarOverheadTricepsExtension ((FITTricepsExtensionExerciseName)8) +#define FITTricepsExtensionExerciseNameInclineDip ((FITTricepsExtensionExerciseName)9) +#define FITTricepsExtensionExerciseNameWeightedInclineDip ((FITTricepsExtensionExerciseName)10) +#define FITTricepsExtensionExerciseNameInclineEzBarLyingTricepsExtension ((FITTricepsExtensionExerciseName)11) +#define FITTricepsExtensionExerciseNameLyingDumbbellPulloverToExtension ((FITTricepsExtensionExerciseName)12) +#define FITTricepsExtensionExerciseNameLyingEzBarTricepsExtension ((FITTricepsExtensionExerciseName)13) +#define FITTricepsExtensionExerciseNameLyingTricepsExtensionToCloseGripBenchPress ((FITTricepsExtensionExerciseName)14) +#define FITTricepsExtensionExerciseNameOverheadDumbbellTricepsExtension ((FITTricepsExtensionExerciseName)15) +#define FITTricepsExtensionExerciseNameRecliningTricepsPress ((FITTricepsExtensionExerciseName)16) +#define FITTricepsExtensionExerciseNameReverseGripPressdown ((FITTricepsExtensionExerciseName)17) +#define FITTricepsExtensionExerciseNameReverseGripTricepsPressdown ((FITTricepsExtensionExerciseName)18) +#define FITTricepsExtensionExerciseNameRopePressdown ((FITTricepsExtensionExerciseName)19) +#define FITTricepsExtensionExerciseNameSeatedBarbellOverheadTricepsExtension ((FITTricepsExtensionExerciseName)20) +#define FITTricepsExtensionExerciseNameSeatedDumbbellOverheadTricepsExtension ((FITTricepsExtensionExerciseName)21) +#define FITTricepsExtensionExerciseNameSeatedEzBarOverheadTricepsExtension ((FITTricepsExtensionExerciseName)22) +#define FITTricepsExtensionExerciseNameSeatedSingleArmOverheadDumbbellExtension ((FITTricepsExtensionExerciseName)23) +#define FITTricepsExtensionExerciseNameSingleArmDumbbellOverheadTricepsExtension ((FITTricepsExtensionExerciseName)24) +#define FITTricepsExtensionExerciseNameSingleDumbbellSeatedOverheadTricepsExtension ((FITTricepsExtensionExerciseName)25) +#define FITTricepsExtensionExerciseNameSingleLegBenchDipAndKick ((FITTricepsExtensionExerciseName)26) +#define FITTricepsExtensionExerciseNameWeightedSingleLegBenchDipAndKick ((FITTricepsExtensionExerciseName)27) +#define FITTricepsExtensionExerciseNameSingleLegDip ((FITTricepsExtensionExerciseName)28) +#define FITTricepsExtensionExerciseNameWeightedSingleLegDip ((FITTricepsExtensionExerciseName)29) +#define FITTricepsExtensionExerciseNameStaticLyingTricepsExtension ((FITTricepsExtensionExerciseName)30) +#define FITTricepsExtensionExerciseNameSuspendedDip ((FITTricepsExtensionExerciseName)31) +#define FITTricepsExtensionExerciseNameWeightedSuspendedDip ((FITTricepsExtensionExerciseName)32) +#define FITTricepsExtensionExerciseNameSwissBallDumbbellLyingTricepsExtension ((FITTricepsExtensionExerciseName)33) +#define FITTricepsExtensionExerciseNameSwissBallEzBarLyingTricepsExtension ((FITTricepsExtensionExerciseName)34) +#define FITTricepsExtensionExerciseNameSwissBallEzBarOverheadTricepsExtension ((FITTricepsExtensionExerciseName)35) +#define FITTricepsExtensionExerciseNameTabletopDip ((FITTricepsExtensionExerciseName)36) +#define FITTricepsExtensionExerciseNameWeightedTabletopDip ((FITTricepsExtensionExerciseName)37) +#define FITTricepsExtensionExerciseNameTricepsExtensionOnFloor ((FITTricepsExtensionExerciseName)38) +#define FITTricepsExtensionExerciseNameTricepsPressdown ((FITTricepsExtensionExerciseName)39) +#define FITTricepsExtensionExerciseNameWeightedDip ((FITTricepsExtensionExerciseName)40) +#define FITTricepsExtensionExerciseNameCount 41 + +typedef FITUInt16 FITWarmUpExerciseName; +#define FITWarmUpExerciseNameInvalid FITUInt16Invalid +#define FITWarmUpExerciseNameQuadrupedRocking ((FITWarmUpExerciseName)0) +#define FITWarmUpExerciseNameNeckTilts ((FITWarmUpExerciseName)1) +#define FITWarmUpExerciseNameAnkleCircles ((FITWarmUpExerciseName)2) +#define FITWarmUpExerciseNameAnkleDorsiflexionWithBand ((FITWarmUpExerciseName)3) +#define FITWarmUpExerciseNameAnkleInternalRotation ((FITWarmUpExerciseName)4) +#define FITWarmUpExerciseNameArmCircles ((FITWarmUpExerciseName)5) +#define FITWarmUpExerciseNameBentOverReachToSky ((FITWarmUpExerciseName)6) +#define FITWarmUpExerciseNameCatCamel ((FITWarmUpExerciseName)7) +#define FITWarmUpExerciseNameElbowToFootLunge ((FITWarmUpExerciseName)8) +#define FITWarmUpExerciseNameForwardAndBackwardLegSwings ((FITWarmUpExerciseName)9) +#define FITWarmUpExerciseNameGroiners ((FITWarmUpExerciseName)10) +#define FITWarmUpExerciseNameInvertedHamstringStretch ((FITWarmUpExerciseName)11) +#define FITWarmUpExerciseNameLateralDuckUnder ((FITWarmUpExerciseName)12) +#define FITWarmUpExerciseNameNeckRotations ((FITWarmUpExerciseName)13) +#define FITWarmUpExerciseNameOppositeArmAndLegBalance ((FITWarmUpExerciseName)14) +#define FITWarmUpExerciseNameReachRollAndLift ((FITWarmUpExerciseName)15) +#define FITWarmUpExerciseNameScorpion ((FITWarmUpExerciseName)16) // Deprecated do not use +#define FITWarmUpExerciseNameShoulderCircles ((FITWarmUpExerciseName)17) +#define FITWarmUpExerciseNameSideToSideLegSwings ((FITWarmUpExerciseName)18) +#define FITWarmUpExerciseNameSleeperStretch ((FITWarmUpExerciseName)19) +#define FITWarmUpExerciseNameSlideOut ((FITWarmUpExerciseName)20) +#define FITWarmUpExerciseNameSwissBallHipCrossover ((FITWarmUpExerciseName)21) +#define FITWarmUpExerciseNameSwissBallReachRollAndLift ((FITWarmUpExerciseName)22) +#define FITWarmUpExerciseNameSwissBallWindshieldWipers ((FITWarmUpExerciseName)23) +#define FITWarmUpExerciseNameThoracicRotation ((FITWarmUpExerciseName)24) +#define FITWarmUpExerciseNameWalkingHighKicks ((FITWarmUpExerciseName)25) +#define FITWarmUpExerciseNameWalkingHighKnees ((FITWarmUpExerciseName)26) +#define FITWarmUpExerciseNameWalkingKneeHugs ((FITWarmUpExerciseName)27) +#define FITWarmUpExerciseNameWalkingLegCradles ((FITWarmUpExerciseName)28) +#define FITWarmUpExerciseNameWalkout ((FITWarmUpExerciseName)29) +#define FITWarmUpExerciseNameWalkoutFromPushUpPosition ((FITWarmUpExerciseName)30) +#define FITWarmUpExerciseNameCount 31 + +typedef FITUInt16 FITRunExerciseName; +#define FITRunExerciseNameInvalid FITUInt16Invalid +#define FITRunExerciseNameRun ((FITRunExerciseName)0) +#define FITRunExerciseNameWalk ((FITRunExerciseName)1) +#define FITRunExerciseNameJog ((FITRunExerciseName)2) +#define FITRunExerciseNameSprint ((FITRunExerciseName)3) +#define FITRunExerciseNameCount 4 + +typedef FITEnum FITWaterType; +#define FITWaterTypeInvalid FITEnumInvalid +#define FITWaterTypeFresh ((FITWaterType)0) +#define FITWaterTypeSalt ((FITWaterType)1) +#define FITWaterTypeEn13319 ((FITWaterType)2) +#define FITWaterTypeCustom ((FITWaterType)3) +#define FITWaterTypeCount 4 + +typedef FITEnum FITTissueModelType; +#define FITTissueModelTypeInvalid FITEnumInvalid +#define FITTissueModelTypeZhl16c ((FITTissueModelType)0) // Buhlmann's decompression algorithm, version C +#define FITTissueModelTypeCount 1 + +typedef FITEnum FITDiveGasStatus; +#define FITDiveGasStatusInvalid FITEnumInvalid +#define FITDiveGasStatusDisabled ((FITDiveGasStatus)0) +#define FITDiveGasStatusEnabled ((FITDiveGasStatus)1) +#define FITDiveGasStatusBackupOnly ((FITDiveGasStatus)2) +#define FITDiveGasStatusCount 3 + +typedef FITEnum FITDiveAlarmType; +#define FITDiveAlarmTypeInvalid FITEnumInvalid +#define FITDiveAlarmTypeDepth ((FITDiveAlarmType)0) // Alarm when a certain depth is crossed +#define FITDiveAlarmTypeTime ((FITDiveAlarmType)1) // Alarm when a certain time has transpired +#define FITDiveAlarmTypeCount 2 + +typedef FITEnum FITDiveBacklightMode; +#define FITDiveBacklightModeInvalid FITEnumInvalid +#define FITDiveBacklightModeAtDepth ((FITDiveBacklightMode)0) +#define FITDiveBacklightModeAlwaysOn ((FITDiveBacklightMode)1) +#define FITDiveBacklightModeCount 2 + +typedef FITUInt16 FITFaveroProduct; +#define FITFaveroProductInvalid FITUInt16Invalid +#define FITFaveroProductAssiomaUno ((FITFaveroProduct)10) +#define FITFaveroProductAssiomaDuo ((FITFaveroProduct)12) +#define FITFaveroProductCount 2 + +typedef FITEnum FITClimbProEvent; +#define FITClimbProEventInvalid FITEnumInvalid +#define FITClimbProEventApproach ((FITClimbProEvent)0) +#define FITClimbProEventStart ((FITClimbProEvent)1) +#define FITClimbProEventComplete ((FITClimbProEvent)2) +#define FITClimbProEventCount 3 + +typedef FITEnum FITTapSensitivity; +#define FITTapSensitivityInvalid FITEnumInvalid +#define FITTapSensitivityHigh ((FITTapSensitivity)0) +#define FITTapSensitivityMedium ((FITTapSensitivity)1) +#define FITTapSensitivityLow ((FITTapSensitivity)2) +#define FITTapSensitivityCount 3 + +typedef FITEnum FITRadarThreatLevelType; +#define FITRadarThreatLevelTypeInvalid FITEnumInvalid +#define FITRadarThreatLevelTypeThreatUnknown ((FITRadarThreatLevelType)0) +#define FITRadarThreatLevelTypeThreatNone ((FITRadarThreatLevelType)1) +#define FITRadarThreatLevelTypeThreatApproaching ((FITRadarThreatLevelType)2) +#define FITRadarThreatLevelTypeThreatApproachingFast ((FITRadarThreatLevelType)3) +#define FITRadarThreatLevelTypeCount 4 + + +// Message Field Definition Numbers +// FileIdMesg Field Definition Numbers +typedef enum FITFileIdMesgFieldDefNum : uint8_t { + FITFileIdMesgFieldDefNumType = 0, + FITFileIdMesgFieldDefNumManufacturer = 1, + FITFileIdMesgFieldDefNumProduct = 2, + FITFileIdMesgFieldDefNumSerialNumber = 3, + FITFileIdMesgFieldDefNumTimeCreated = 4, + FITFileIdMesgFieldDefNumNumber = 5, + FITFileIdMesgFieldDefNumProductName = 8, +} FITFileIdMesgFieldDefNum; + +typedef enum FITFileIdMesgProductField : uint8_t { + FITFileIdMesgProductFieldFaveroProductSubField, + FITFileIdMesgProductFieldGarminProductSubField, +} FITFileIdMesgProductField; + +// FileCreatorMesg Field Definition Numbers +typedef enum FITFileCreatorMesgFieldDefNum : uint8_t { + FITFileCreatorMesgFieldDefNumSoftwareVersion = 0, + FITFileCreatorMesgFieldDefNumHardwareVersion = 1, +} FITFileCreatorMesgFieldDefNum; + +// TimestampCorrelationMesg Field Definition Numbers +typedef enum FITTimestampCorrelationMesgFieldDefNum : uint8_t { + FITTimestampCorrelationMesgFieldDefNumTimestamp = 253, + FITTimestampCorrelationMesgFieldDefNumFractionalTimestamp = 0, + FITTimestampCorrelationMesgFieldDefNumSystemTimestamp = 1, + FITTimestampCorrelationMesgFieldDefNumFractionalSystemTimestamp = 2, + FITTimestampCorrelationMesgFieldDefNumLocalTimestamp = 3, + FITTimestampCorrelationMesgFieldDefNumTimestampMs = 4, + FITTimestampCorrelationMesgFieldDefNumSystemTimestampMs = 5, +} FITTimestampCorrelationMesgFieldDefNum; + +// SoftwareMesg Field Definition Numbers +typedef enum FITSoftwareMesgFieldDefNum : uint8_t { + FITSoftwareMesgFieldDefNumMessageIndex = 254, + FITSoftwareMesgFieldDefNumVersion = 3, + FITSoftwareMesgFieldDefNumPartNumber = 5, +} FITSoftwareMesgFieldDefNum; + +// SlaveDeviceMesg Field Definition Numbers +typedef enum FITSlaveDeviceMesgFieldDefNum : uint8_t { + FITSlaveDeviceMesgFieldDefNumManufacturer = 0, + FITSlaveDeviceMesgFieldDefNumProduct = 1, +} FITSlaveDeviceMesgFieldDefNum; + +typedef enum FITSlaveDeviceMesgProductField : uint8_t { + FITSlaveDeviceMesgProductFieldFaveroProductSubField, + FITSlaveDeviceMesgProductFieldGarminProductSubField, +} FITSlaveDeviceMesgProductField; + +// CapabilitiesMesg Field Definition Numbers +typedef enum FITCapabilitiesMesgFieldDefNum : uint8_t { + FITCapabilitiesMesgFieldDefNumLanguages = 0, + FITCapabilitiesMesgFieldDefNumSports = 1, + FITCapabilitiesMesgFieldDefNumWorkoutsSupported = 21, + FITCapabilitiesMesgFieldDefNumConnectivitySupported = 23, +} FITCapabilitiesMesgFieldDefNum; + +// FileCapabilitiesMesg Field Definition Numbers +typedef enum FITFileCapabilitiesMesgFieldDefNum : uint8_t { + FITFileCapabilitiesMesgFieldDefNumMessageIndex = 254, + FITFileCapabilitiesMesgFieldDefNumType = 0, + FITFileCapabilitiesMesgFieldDefNumFlags = 1, + FITFileCapabilitiesMesgFieldDefNumDirectory = 2, + FITFileCapabilitiesMesgFieldDefNumMaxCount = 3, + FITFileCapabilitiesMesgFieldDefNumMaxSize = 4, +} FITFileCapabilitiesMesgFieldDefNum; + +// MesgCapabilitiesMesg Field Definition Numbers +typedef enum FITMesgCapabilitiesMesgFieldDefNum : uint8_t { + FITMesgCapabilitiesMesgFieldDefNumMessageIndex = 254, + FITMesgCapabilitiesMesgFieldDefNumFile = 0, + FITMesgCapabilitiesMesgFieldDefNumMesgNum = 1, + FITMesgCapabilitiesMesgFieldDefNumCountType = 2, + FITMesgCapabilitiesMesgFieldDefNumCount = 3, +} FITMesgCapabilitiesMesgFieldDefNum; + +typedef enum FITMesgCapabilitiesMesgCountField : uint8_t { + FITMesgCapabilitiesMesgCountFieldNumPerFileSubField, + FITMesgCapabilitiesMesgCountFieldMaxPerFileSubField, + FITMesgCapabilitiesMesgCountFieldMaxPerFileTypeSubField, +} FITMesgCapabilitiesMesgCountField; + +// FieldCapabilitiesMesg Field Definition Numbers +typedef enum FITFieldCapabilitiesMesgFieldDefNum : uint8_t { + FITFieldCapabilitiesMesgFieldDefNumMessageIndex = 254, + FITFieldCapabilitiesMesgFieldDefNumFile = 0, + FITFieldCapabilitiesMesgFieldDefNumMesgNum = 1, + FITFieldCapabilitiesMesgFieldDefNumFieldNum = 2, + FITFieldCapabilitiesMesgFieldDefNumCount = 3, +} FITFieldCapabilitiesMesgFieldDefNum; + +// DeviceSettingsMesg Field Definition Numbers +typedef enum FITDeviceSettingsMesgFieldDefNum : uint8_t { + FITDeviceSettingsMesgFieldDefNumActiveTimeZone = 0, + FITDeviceSettingsMesgFieldDefNumUtcOffset = 1, + FITDeviceSettingsMesgFieldDefNumTimeOffset = 2, + FITDeviceSettingsMesgFieldDefNumTimeMode = 4, + FITDeviceSettingsMesgFieldDefNumTimeZoneOffset = 5, + FITDeviceSettingsMesgFieldDefNumBacklightMode = 12, + FITDeviceSettingsMesgFieldDefNumActivityTrackerEnabled = 36, + FITDeviceSettingsMesgFieldDefNumClockTime = 39, + FITDeviceSettingsMesgFieldDefNumPagesEnabled = 40, + FITDeviceSettingsMesgFieldDefNumMoveAlertEnabled = 46, + FITDeviceSettingsMesgFieldDefNumDateMode = 47, + FITDeviceSettingsMesgFieldDefNumDisplayOrientation = 55, + FITDeviceSettingsMesgFieldDefNumMountingSide = 56, + FITDeviceSettingsMesgFieldDefNumDefaultPage = 57, + FITDeviceSettingsMesgFieldDefNumAutosyncMinSteps = 58, + FITDeviceSettingsMesgFieldDefNumAutosyncMinTime = 59, + FITDeviceSettingsMesgFieldDefNumLactateThresholdAutodetectEnabled = 80, + FITDeviceSettingsMesgFieldDefNumBleAutoUploadEnabled = 86, + FITDeviceSettingsMesgFieldDefNumAutoSyncFrequency = 89, + FITDeviceSettingsMesgFieldDefNumAutoActivityDetect = 90, + FITDeviceSettingsMesgFieldDefNumNumberOfScreens = 94, + FITDeviceSettingsMesgFieldDefNumSmartNotificationDisplayOrientation = 95, + FITDeviceSettingsMesgFieldDefNumTapInterface = 134, + FITDeviceSettingsMesgFieldDefNumTapSensitivity = 174, +} FITDeviceSettingsMesgFieldDefNum; + +// UserProfileMesg Field Definition Numbers +typedef enum FITUserProfileMesgFieldDefNum : uint8_t { + FITUserProfileMesgFieldDefNumMessageIndex = 254, + FITUserProfileMesgFieldDefNumFriendlyName = 0, + FITUserProfileMesgFieldDefNumGender = 1, + FITUserProfileMesgFieldDefNumAge = 2, + FITUserProfileMesgFieldDefNumHeight = 3, + FITUserProfileMesgFieldDefNumWeight = 4, + FITUserProfileMesgFieldDefNumLanguage = 5, + FITUserProfileMesgFieldDefNumElevSetting = 6, + FITUserProfileMesgFieldDefNumWeightSetting = 7, + FITUserProfileMesgFieldDefNumRestingHeartRate = 8, + FITUserProfileMesgFieldDefNumDefaultMaxRunningHeartRate = 9, + FITUserProfileMesgFieldDefNumDefaultMaxBikingHeartRate = 10, + FITUserProfileMesgFieldDefNumDefaultMaxHeartRate = 11, + FITUserProfileMesgFieldDefNumHrSetting = 12, + FITUserProfileMesgFieldDefNumSpeedSetting = 13, + FITUserProfileMesgFieldDefNumDistSetting = 14, + FITUserProfileMesgFieldDefNumPowerSetting = 16, + FITUserProfileMesgFieldDefNumActivityClass = 17, + FITUserProfileMesgFieldDefNumPositionSetting = 18, + FITUserProfileMesgFieldDefNumTemperatureSetting = 21, + FITUserProfileMesgFieldDefNumLocalId = 22, + FITUserProfileMesgFieldDefNumGlobalId = 23, + FITUserProfileMesgFieldDefNumWakeTime = 28, + FITUserProfileMesgFieldDefNumSleepTime = 29, + FITUserProfileMesgFieldDefNumHeightSetting = 30, + FITUserProfileMesgFieldDefNumUserRunningStepLength = 31, + FITUserProfileMesgFieldDefNumUserWalkingStepLength = 32, + FITUserProfileMesgFieldDefNumDepthSetting = 47, + FITUserProfileMesgFieldDefNumDiveCount = 49, +} FITUserProfileMesgFieldDefNum; + +// HrmProfileMesg Field Definition Numbers +typedef enum FITHrmProfileMesgFieldDefNum : uint8_t { + FITHrmProfileMesgFieldDefNumMessageIndex = 254, + FITHrmProfileMesgFieldDefNumEnabled = 0, + FITHrmProfileMesgFieldDefNumHrmAntId = 1, + FITHrmProfileMesgFieldDefNumLogHrv = 2, + FITHrmProfileMesgFieldDefNumHrmAntIdTransType = 3, +} FITHrmProfileMesgFieldDefNum; + +// SdmProfileMesg Field Definition Numbers +typedef enum FITSdmProfileMesgFieldDefNum : uint8_t { + FITSdmProfileMesgFieldDefNumMessageIndex = 254, + FITSdmProfileMesgFieldDefNumEnabled = 0, + FITSdmProfileMesgFieldDefNumSdmAntId = 1, + FITSdmProfileMesgFieldDefNumSdmCalFactor = 2, + FITSdmProfileMesgFieldDefNumOdometer = 3, + FITSdmProfileMesgFieldDefNumSpeedSource = 4, + FITSdmProfileMesgFieldDefNumSdmAntIdTransType = 5, + FITSdmProfileMesgFieldDefNumOdometerRollover = 7, +} FITSdmProfileMesgFieldDefNum; + +// BikeProfileMesg Field Definition Numbers +typedef enum FITBikeProfileMesgFieldDefNum : uint8_t { + FITBikeProfileMesgFieldDefNumMessageIndex = 254, + FITBikeProfileMesgFieldDefNumName = 0, + FITBikeProfileMesgFieldDefNumSport = 1, + FITBikeProfileMesgFieldDefNumSubSport = 2, + FITBikeProfileMesgFieldDefNumOdometer = 3, + FITBikeProfileMesgFieldDefNumBikeSpdAntId = 4, + FITBikeProfileMesgFieldDefNumBikeCadAntId = 5, + FITBikeProfileMesgFieldDefNumBikeSpdcadAntId = 6, + FITBikeProfileMesgFieldDefNumBikePowerAntId = 7, + FITBikeProfileMesgFieldDefNumCustomWheelsize = 8, + FITBikeProfileMesgFieldDefNumAutoWheelsize = 9, + FITBikeProfileMesgFieldDefNumBikeWeight = 10, + FITBikeProfileMesgFieldDefNumPowerCalFactor = 11, + FITBikeProfileMesgFieldDefNumAutoWheelCal = 12, + FITBikeProfileMesgFieldDefNumAutoPowerZero = 13, + FITBikeProfileMesgFieldDefNumId = 14, + FITBikeProfileMesgFieldDefNumSpdEnabled = 15, + FITBikeProfileMesgFieldDefNumCadEnabled = 16, + FITBikeProfileMesgFieldDefNumSpdcadEnabled = 17, + FITBikeProfileMesgFieldDefNumPowerEnabled = 18, + FITBikeProfileMesgFieldDefNumCrankLength = 19, + FITBikeProfileMesgFieldDefNumEnabled = 20, + FITBikeProfileMesgFieldDefNumBikeSpdAntIdTransType = 21, + FITBikeProfileMesgFieldDefNumBikeCadAntIdTransType = 22, + FITBikeProfileMesgFieldDefNumBikeSpdcadAntIdTransType = 23, + FITBikeProfileMesgFieldDefNumBikePowerAntIdTransType = 24, + FITBikeProfileMesgFieldDefNumOdometerRollover = 37, + FITBikeProfileMesgFieldDefNumFrontGearNum = 38, + FITBikeProfileMesgFieldDefNumFrontGear = 39, + FITBikeProfileMesgFieldDefNumRearGearNum = 40, + FITBikeProfileMesgFieldDefNumRearGear = 41, + FITBikeProfileMesgFieldDefNumShimanoDi2Enabled = 44, +} FITBikeProfileMesgFieldDefNum; + +// ConnectivityMesg Field Definition Numbers +typedef enum FITConnectivityMesgFieldDefNum : uint8_t { + FITConnectivityMesgFieldDefNumBluetoothEnabled = 0, + FITConnectivityMesgFieldDefNumBluetoothLeEnabled = 1, + FITConnectivityMesgFieldDefNumAntEnabled = 2, + FITConnectivityMesgFieldDefNumName = 3, + FITConnectivityMesgFieldDefNumLiveTrackingEnabled = 4, + FITConnectivityMesgFieldDefNumWeatherConditionsEnabled = 5, + FITConnectivityMesgFieldDefNumWeatherAlertsEnabled = 6, + FITConnectivityMesgFieldDefNumAutoActivityUploadEnabled = 7, + FITConnectivityMesgFieldDefNumCourseDownloadEnabled = 8, + FITConnectivityMesgFieldDefNumWorkoutDownloadEnabled = 9, + FITConnectivityMesgFieldDefNumGpsEphemerisDownloadEnabled = 10, + FITConnectivityMesgFieldDefNumIncidentDetectionEnabled = 11, + FITConnectivityMesgFieldDefNumGrouptrackEnabled = 12, +} FITConnectivityMesgFieldDefNum; + +// WatchfaceSettingsMesg Field Definition Numbers +typedef enum FITWatchfaceSettingsMesgFieldDefNum : uint8_t { + FITWatchfaceSettingsMesgFieldDefNumMessageIndex = 254, + FITWatchfaceSettingsMesgFieldDefNumMode = 0, + FITWatchfaceSettingsMesgFieldDefNumLayout = 1, +} FITWatchfaceSettingsMesgFieldDefNum; + +typedef enum FITWatchfaceSettingsMesgLayoutField : uint8_t { + FITWatchfaceSettingsMesgLayoutFieldDigitalLayoutSubField, + FITWatchfaceSettingsMesgLayoutFieldAnalogLayoutSubField, +} FITWatchfaceSettingsMesgLayoutField; + +// OhrSettingsMesg Field Definition Numbers +typedef enum FITOhrSettingsMesgFieldDefNum : uint8_t { + FITOhrSettingsMesgFieldDefNumTimestamp = 253, + FITOhrSettingsMesgFieldDefNumEnabled = 0, +} FITOhrSettingsMesgFieldDefNum; + +// ZonesTargetMesg Field Definition Numbers +typedef enum FITZonesTargetMesgFieldDefNum : uint8_t { + FITZonesTargetMesgFieldDefNumMaxHeartRate = 1, + FITZonesTargetMesgFieldDefNumThresholdHeartRate = 2, + FITZonesTargetMesgFieldDefNumFunctionalThresholdPower = 3, + FITZonesTargetMesgFieldDefNumHrCalcType = 5, + FITZonesTargetMesgFieldDefNumPwrCalcType = 7, +} FITZonesTargetMesgFieldDefNum; + +// SportMesg Field Definition Numbers +typedef enum FITSportMesgFieldDefNum : uint8_t { + FITSportMesgFieldDefNumSport = 0, + FITSportMesgFieldDefNumSubSport = 1, + FITSportMesgFieldDefNumName = 3, +} FITSportMesgFieldDefNum; + +// HrZoneMesg Field Definition Numbers +typedef enum FITHrZoneMesgFieldDefNum : uint8_t { + FITHrZoneMesgFieldDefNumMessageIndex = 254, + FITHrZoneMesgFieldDefNumHighBpm = 1, + FITHrZoneMesgFieldDefNumName = 2, +} FITHrZoneMesgFieldDefNum; + +// SpeedZoneMesg Field Definition Numbers +typedef enum FITSpeedZoneMesgFieldDefNum : uint8_t { + FITSpeedZoneMesgFieldDefNumMessageIndex = 254, + FITSpeedZoneMesgFieldDefNumHighValue = 0, + FITSpeedZoneMesgFieldDefNumName = 1, +} FITSpeedZoneMesgFieldDefNum; + +// CadenceZoneMesg Field Definition Numbers +typedef enum FITCadenceZoneMesgFieldDefNum : uint8_t { + FITCadenceZoneMesgFieldDefNumMessageIndex = 254, + FITCadenceZoneMesgFieldDefNumHighValue = 0, + FITCadenceZoneMesgFieldDefNumName = 1, +} FITCadenceZoneMesgFieldDefNum; + +// PowerZoneMesg Field Definition Numbers +typedef enum FITPowerZoneMesgFieldDefNum : uint8_t { + FITPowerZoneMesgFieldDefNumMessageIndex = 254, + FITPowerZoneMesgFieldDefNumHighValue = 1, + FITPowerZoneMesgFieldDefNumName = 2, +} FITPowerZoneMesgFieldDefNum; + +// MetZoneMesg Field Definition Numbers +typedef enum FITMetZoneMesgFieldDefNum : uint8_t { + FITMetZoneMesgFieldDefNumMessageIndex = 254, + FITMetZoneMesgFieldDefNumHighBpm = 1, + FITMetZoneMesgFieldDefNumCalories = 2, + FITMetZoneMesgFieldDefNumFatCalories = 3, +} FITMetZoneMesgFieldDefNum; + +// DiveSettingsMesg Field Definition Numbers +typedef enum FITDiveSettingsMesgFieldDefNum : uint8_t { + FITDiveSettingsMesgFieldDefNumMessageIndex = 254, + FITDiveSettingsMesgFieldDefNumName = 0, + FITDiveSettingsMesgFieldDefNumModel = 1, + FITDiveSettingsMesgFieldDefNumGfLow = 2, + FITDiveSettingsMesgFieldDefNumGfHigh = 3, + FITDiveSettingsMesgFieldDefNumWaterType = 4, + FITDiveSettingsMesgFieldDefNumWaterDensity = 5, + FITDiveSettingsMesgFieldDefNumPo2Warn = 6, + FITDiveSettingsMesgFieldDefNumPo2Critical = 7, + FITDiveSettingsMesgFieldDefNumPo2Deco = 8, + FITDiveSettingsMesgFieldDefNumSafetyStopEnabled = 9, + FITDiveSettingsMesgFieldDefNumBottomDepth = 10, + FITDiveSettingsMesgFieldDefNumBottomTime = 11, + FITDiveSettingsMesgFieldDefNumApneaCountdownEnabled = 12, + FITDiveSettingsMesgFieldDefNumApneaCountdownTime = 13, + FITDiveSettingsMesgFieldDefNumBacklightMode = 14, + FITDiveSettingsMesgFieldDefNumBacklightBrightness = 15, + FITDiveSettingsMesgFieldDefNumBacklightTimeout = 16, + FITDiveSettingsMesgFieldDefNumRepeatDiveInterval = 17, + FITDiveSettingsMesgFieldDefNumSafetyStopTime = 18, + FITDiveSettingsMesgFieldDefNumHeartRateSourceType = 19, + FITDiveSettingsMesgFieldDefNumHeartRateSource = 20, +} FITDiveSettingsMesgFieldDefNum; + +typedef enum FITDiveSettingsMesgHeartRateSourceField : uint8_t { + FITDiveSettingsMesgHeartRateSourceFieldHeartRateAntplusDeviceTypeSubField, + FITDiveSettingsMesgHeartRateSourceFieldHeartRateLocalDeviceTypeSubField, +} FITDiveSettingsMesgHeartRateSourceField; + +// DiveAlarmMesg Field Definition Numbers +typedef enum FITDiveAlarmMesgFieldDefNum : uint8_t { + FITDiveAlarmMesgFieldDefNumMessageIndex = 254, + FITDiveAlarmMesgFieldDefNumDepth = 0, + FITDiveAlarmMesgFieldDefNumTime = 1, + FITDiveAlarmMesgFieldDefNumEnabled = 2, + FITDiveAlarmMesgFieldDefNumAlarmType = 3, + FITDiveAlarmMesgFieldDefNumSound = 4, + FITDiveAlarmMesgFieldDefNumDiveTypes = 5, +} FITDiveAlarmMesgFieldDefNum; + +// DiveGasMesg Field Definition Numbers +typedef enum FITDiveGasMesgFieldDefNum : uint8_t { + FITDiveGasMesgFieldDefNumMessageIndex = 254, + FITDiveGasMesgFieldDefNumHeliumContent = 0, + FITDiveGasMesgFieldDefNumOxygenContent = 1, + FITDiveGasMesgFieldDefNumStatus = 2, +} FITDiveGasMesgFieldDefNum; + +// GoalMesg Field Definition Numbers +typedef enum FITGoalMesgFieldDefNum : uint8_t { + FITGoalMesgFieldDefNumMessageIndex = 254, + FITGoalMesgFieldDefNumSport = 0, + FITGoalMesgFieldDefNumSubSport = 1, + FITGoalMesgFieldDefNumStartDate = 2, + FITGoalMesgFieldDefNumEndDate = 3, + FITGoalMesgFieldDefNumType = 4, + FITGoalMesgFieldDefNumValue = 5, + FITGoalMesgFieldDefNumRepeat = 6, + FITGoalMesgFieldDefNumTargetValue = 7, + FITGoalMesgFieldDefNumRecurrence = 8, + FITGoalMesgFieldDefNumRecurrenceValue = 9, + FITGoalMesgFieldDefNumEnabled = 10, + FITGoalMesgFieldDefNumSource = 11, +} FITGoalMesgFieldDefNum; + +// ActivityMesg Field Definition Numbers +typedef enum FITActivityMesgFieldDefNum : uint8_t { + FITActivityMesgFieldDefNumTimestamp = 253, + FITActivityMesgFieldDefNumTotalTimerTime = 0, + FITActivityMesgFieldDefNumNumSessions = 1, + FITActivityMesgFieldDefNumType = 2, + FITActivityMesgFieldDefNumEvent = 3, + FITActivityMesgFieldDefNumEventType = 4, + FITActivityMesgFieldDefNumLocalTimestamp = 5, + FITActivityMesgFieldDefNumEventGroup = 6, +} FITActivityMesgFieldDefNum; + +// SessionMesg Field Definition Numbers +typedef enum FITSessionMesgFieldDefNum : uint8_t { + FITSessionMesgFieldDefNumMessageIndex = 254, + FITSessionMesgFieldDefNumTimestamp = 253, + FITSessionMesgFieldDefNumEvent = 0, + FITSessionMesgFieldDefNumEventType = 1, + FITSessionMesgFieldDefNumStartTime = 2, + FITSessionMesgFieldDefNumStartPositionLat = 3, + FITSessionMesgFieldDefNumStartPositionLong = 4, + FITSessionMesgFieldDefNumSport = 5, + FITSessionMesgFieldDefNumSubSport = 6, + FITSessionMesgFieldDefNumTotalElapsedTime = 7, + FITSessionMesgFieldDefNumTotalTimerTime = 8, + FITSessionMesgFieldDefNumTotalDistance = 9, + FITSessionMesgFieldDefNumTotalCycles = 10, + FITSessionMesgFieldDefNumTotalCalories = 11, + FITSessionMesgFieldDefNumTotalFatCalories = 13, + FITSessionMesgFieldDefNumAvgSpeed = 14, + FITSessionMesgFieldDefNumMaxSpeed = 15, + FITSessionMesgFieldDefNumAvgHeartRate = 16, + FITSessionMesgFieldDefNumMaxHeartRate = 17, + FITSessionMesgFieldDefNumAvgCadence = 18, + FITSessionMesgFieldDefNumMaxCadence = 19, + FITSessionMesgFieldDefNumAvgPower = 20, + FITSessionMesgFieldDefNumMaxPower = 21, + FITSessionMesgFieldDefNumTotalAscent = 22, + FITSessionMesgFieldDefNumTotalDescent = 23, + FITSessionMesgFieldDefNumTotalTrainingEffect = 24, + FITSessionMesgFieldDefNumFirstLapIndex = 25, + FITSessionMesgFieldDefNumNumLaps = 26, + FITSessionMesgFieldDefNumEventGroup = 27, + FITSessionMesgFieldDefNumTrigger = 28, + FITSessionMesgFieldDefNumNecLat = 29, + FITSessionMesgFieldDefNumNecLong = 30, + FITSessionMesgFieldDefNumSwcLat = 31, + FITSessionMesgFieldDefNumSwcLong = 32, + FITSessionMesgFieldDefNumNumLengths = 33, + FITSessionMesgFieldDefNumNormalizedPower = 34, + FITSessionMesgFieldDefNumTrainingStressScore = 35, + FITSessionMesgFieldDefNumIntensityFactor = 36, + FITSessionMesgFieldDefNumLeftRightBalance = 37, + FITSessionMesgFieldDefNumAvgStrokeCount = 41, + FITSessionMesgFieldDefNumAvgStrokeDistance = 42, + FITSessionMesgFieldDefNumSwimStroke = 43, + FITSessionMesgFieldDefNumPoolLength = 44, + FITSessionMesgFieldDefNumThresholdPower = 45, + FITSessionMesgFieldDefNumPoolLengthUnit = 46, + FITSessionMesgFieldDefNumNumActiveLengths = 47, + FITSessionMesgFieldDefNumTotalWork = 48, + FITSessionMesgFieldDefNumAvgAltitude = 49, + FITSessionMesgFieldDefNumMaxAltitude = 50, + FITSessionMesgFieldDefNumGpsAccuracy = 51, + FITSessionMesgFieldDefNumAvgGrade = 52, + FITSessionMesgFieldDefNumAvgPosGrade = 53, + FITSessionMesgFieldDefNumAvgNegGrade = 54, + FITSessionMesgFieldDefNumMaxPosGrade = 55, + FITSessionMesgFieldDefNumMaxNegGrade = 56, + FITSessionMesgFieldDefNumAvgTemperature = 57, + FITSessionMesgFieldDefNumMaxTemperature = 58, + FITSessionMesgFieldDefNumTotalMovingTime = 59, + FITSessionMesgFieldDefNumAvgPosVerticalSpeed = 60, + FITSessionMesgFieldDefNumAvgNegVerticalSpeed = 61, + FITSessionMesgFieldDefNumMaxPosVerticalSpeed = 62, + FITSessionMesgFieldDefNumMaxNegVerticalSpeed = 63, + FITSessionMesgFieldDefNumMinHeartRate = 64, + FITSessionMesgFieldDefNumTimeInHrZone = 65, + FITSessionMesgFieldDefNumTimeInSpeedZone = 66, + FITSessionMesgFieldDefNumTimeInCadenceZone = 67, + FITSessionMesgFieldDefNumTimeInPowerZone = 68, + FITSessionMesgFieldDefNumAvgLapTime = 69, + FITSessionMesgFieldDefNumBestLapIndex = 70, + FITSessionMesgFieldDefNumMinAltitude = 71, + FITSessionMesgFieldDefNumPlayerScore = 82, + FITSessionMesgFieldDefNumOpponentScore = 83, + FITSessionMesgFieldDefNumOpponentName = 84, + FITSessionMesgFieldDefNumStrokeCount = 85, + FITSessionMesgFieldDefNumZoneCount = 86, + FITSessionMesgFieldDefNumMaxBallSpeed = 87, + FITSessionMesgFieldDefNumAvgBallSpeed = 88, + FITSessionMesgFieldDefNumAvgVerticalOscillation = 89, + FITSessionMesgFieldDefNumAvgStanceTimePercent = 90, + FITSessionMesgFieldDefNumAvgStanceTime = 91, + FITSessionMesgFieldDefNumAvgFractionalCadence = 92, + FITSessionMesgFieldDefNumMaxFractionalCadence = 93, + FITSessionMesgFieldDefNumTotalFractionalCycles = 94, + FITSessionMesgFieldDefNumAvgTotalHemoglobinConc = 95, + FITSessionMesgFieldDefNumMinTotalHemoglobinConc = 96, + FITSessionMesgFieldDefNumMaxTotalHemoglobinConc = 97, + FITSessionMesgFieldDefNumAvgSaturatedHemoglobinPercent = 98, + FITSessionMesgFieldDefNumMinSaturatedHemoglobinPercent = 99, + FITSessionMesgFieldDefNumMaxSaturatedHemoglobinPercent = 100, + FITSessionMesgFieldDefNumAvgLeftTorqueEffectiveness = 101, + FITSessionMesgFieldDefNumAvgRightTorqueEffectiveness = 102, + FITSessionMesgFieldDefNumAvgLeftPedalSmoothness = 103, + FITSessionMesgFieldDefNumAvgRightPedalSmoothness = 104, + FITSessionMesgFieldDefNumAvgCombinedPedalSmoothness = 105, + FITSessionMesgFieldDefNumSportIndex = 111, + FITSessionMesgFieldDefNumTimeStanding = 112, + FITSessionMesgFieldDefNumStandCount = 113, + FITSessionMesgFieldDefNumAvgLeftPco = 114, + FITSessionMesgFieldDefNumAvgRightPco = 115, + FITSessionMesgFieldDefNumAvgLeftPowerPhase = 116, + FITSessionMesgFieldDefNumAvgLeftPowerPhasePeak = 117, + FITSessionMesgFieldDefNumAvgRightPowerPhase = 118, + FITSessionMesgFieldDefNumAvgRightPowerPhasePeak = 119, + FITSessionMesgFieldDefNumAvgPowerPosition = 120, + FITSessionMesgFieldDefNumMaxPowerPosition = 121, + FITSessionMesgFieldDefNumAvgCadencePosition = 122, + FITSessionMesgFieldDefNumMaxCadencePosition = 123, + FITSessionMesgFieldDefNumEnhancedAvgSpeed = 124, + FITSessionMesgFieldDefNumEnhancedMaxSpeed = 125, + FITSessionMesgFieldDefNumEnhancedAvgAltitude = 126, + FITSessionMesgFieldDefNumEnhancedMinAltitude = 127, + FITSessionMesgFieldDefNumEnhancedMaxAltitude = 128, + FITSessionMesgFieldDefNumAvgLevMotorPower = 129, + FITSessionMesgFieldDefNumMaxLevMotorPower = 130, + FITSessionMesgFieldDefNumLevBatteryConsumption = 131, + FITSessionMesgFieldDefNumAvgVerticalRatio = 132, + FITSessionMesgFieldDefNumAvgStanceTimeBalance = 133, + FITSessionMesgFieldDefNumAvgStepLength = 134, + FITSessionMesgFieldDefNumTotalAnaerobicTrainingEffect = 137, + FITSessionMesgFieldDefNumAvgVam = 139, + FITSessionMesgFieldDefNumTrainingLoadPeak = 168, + FITSessionMesgFieldDefNumTotalGrit = 181, + FITSessionMesgFieldDefNumTotalFlow = 182, + FITSessionMesgFieldDefNumJumpCount = 183, + FITSessionMesgFieldDefNumAvgGrit = 186, + FITSessionMesgFieldDefNumAvgFlow = 187, + FITSessionMesgFieldDefNumTotalFractionalAscent = 199, + FITSessionMesgFieldDefNumTotalFractionalDescent = 200, + FITSessionMesgFieldDefNumAvgCoreTemperature = 208, + FITSessionMesgFieldDefNumMinCoreTemperature = 209, + FITSessionMesgFieldDefNumMaxCoreTemperature = 210, +} FITSessionMesgFieldDefNum; + +typedef enum FITSessionMesgTotalCyclesField : uint8_t { + FITSessionMesgTotalCyclesFieldTotalStridesSubField, + FITSessionMesgTotalCyclesFieldTotalStrokesSubField, +} FITSessionMesgTotalCyclesField; + +typedef enum FITSessionMesgAvgCadenceField : uint8_t { + FITSessionMesgAvgCadenceFieldAvgRunningCadenceSubField, +} FITSessionMesgAvgCadenceField; + +typedef enum FITSessionMesgMaxCadenceField : uint8_t { + FITSessionMesgMaxCadenceFieldMaxRunningCadenceSubField, +} FITSessionMesgMaxCadenceField; + +// LapMesg Field Definition Numbers +typedef enum FITLapMesgFieldDefNum : uint8_t { + FITLapMesgFieldDefNumMessageIndex = 254, + FITLapMesgFieldDefNumTimestamp = 253, + FITLapMesgFieldDefNumEvent = 0, + FITLapMesgFieldDefNumEventType = 1, + FITLapMesgFieldDefNumStartTime = 2, + FITLapMesgFieldDefNumStartPositionLat = 3, + FITLapMesgFieldDefNumStartPositionLong = 4, + FITLapMesgFieldDefNumEndPositionLat = 5, + FITLapMesgFieldDefNumEndPositionLong = 6, + FITLapMesgFieldDefNumTotalElapsedTime = 7, + FITLapMesgFieldDefNumTotalTimerTime = 8, + FITLapMesgFieldDefNumTotalDistance = 9, + FITLapMesgFieldDefNumTotalCycles = 10, + FITLapMesgFieldDefNumTotalCalories = 11, + FITLapMesgFieldDefNumTotalFatCalories = 12, + FITLapMesgFieldDefNumAvgSpeed = 13, + FITLapMesgFieldDefNumMaxSpeed = 14, + FITLapMesgFieldDefNumAvgHeartRate = 15, + FITLapMesgFieldDefNumMaxHeartRate = 16, + FITLapMesgFieldDefNumAvgCadence = 17, + FITLapMesgFieldDefNumMaxCadence = 18, + FITLapMesgFieldDefNumAvgPower = 19, + FITLapMesgFieldDefNumMaxPower = 20, + FITLapMesgFieldDefNumTotalAscent = 21, + FITLapMesgFieldDefNumTotalDescent = 22, + FITLapMesgFieldDefNumIntensity = 23, + FITLapMesgFieldDefNumLapTrigger = 24, + FITLapMesgFieldDefNumSport = 25, + FITLapMesgFieldDefNumEventGroup = 26, + FITLapMesgFieldDefNumNumLengths = 32, + FITLapMesgFieldDefNumNormalizedPower = 33, + FITLapMesgFieldDefNumLeftRightBalance = 34, + FITLapMesgFieldDefNumFirstLengthIndex = 35, + FITLapMesgFieldDefNumAvgStrokeDistance = 37, + FITLapMesgFieldDefNumSwimStroke = 38, + FITLapMesgFieldDefNumSubSport = 39, + FITLapMesgFieldDefNumNumActiveLengths = 40, + FITLapMesgFieldDefNumTotalWork = 41, + FITLapMesgFieldDefNumAvgAltitude = 42, + FITLapMesgFieldDefNumMaxAltitude = 43, + FITLapMesgFieldDefNumGpsAccuracy = 44, + FITLapMesgFieldDefNumAvgGrade = 45, + FITLapMesgFieldDefNumAvgPosGrade = 46, + FITLapMesgFieldDefNumAvgNegGrade = 47, + FITLapMesgFieldDefNumMaxPosGrade = 48, + FITLapMesgFieldDefNumMaxNegGrade = 49, + FITLapMesgFieldDefNumAvgTemperature = 50, + FITLapMesgFieldDefNumMaxTemperature = 51, + FITLapMesgFieldDefNumTotalMovingTime = 52, + FITLapMesgFieldDefNumAvgPosVerticalSpeed = 53, + FITLapMesgFieldDefNumAvgNegVerticalSpeed = 54, + FITLapMesgFieldDefNumMaxPosVerticalSpeed = 55, + FITLapMesgFieldDefNumMaxNegVerticalSpeed = 56, + FITLapMesgFieldDefNumTimeInHrZone = 57, + FITLapMesgFieldDefNumTimeInSpeedZone = 58, + FITLapMesgFieldDefNumTimeInCadenceZone = 59, + FITLapMesgFieldDefNumTimeInPowerZone = 60, + FITLapMesgFieldDefNumRepetitionNum = 61, + FITLapMesgFieldDefNumMinAltitude = 62, + FITLapMesgFieldDefNumMinHeartRate = 63, + FITLapMesgFieldDefNumWktStepIndex = 71, + FITLapMesgFieldDefNumOpponentScore = 74, + FITLapMesgFieldDefNumStrokeCount = 75, + FITLapMesgFieldDefNumZoneCount = 76, + FITLapMesgFieldDefNumAvgVerticalOscillation = 77, + FITLapMesgFieldDefNumAvgStanceTimePercent = 78, + FITLapMesgFieldDefNumAvgStanceTime = 79, + FITLapMesgFieldDefNumAvgFractionalCadence = 80, + FITLapMesgFieldDefNumMaxFractionalCadence = 81, + FITLapMesgFieldDefNumTotalFractionalCycles = 82, + FITLapMesgFieldDefNumPlayerScore = 83, + FITLapMesgFieldDefNumAvgTotalHemoglobinConc = 84, + FITLapMesgFieldDefNumMinTotalHemoglobinConc = 85, + FITLapMesgFieldDefNumMaxTotalHemoglobinConc = 86, + FITLapMesgFieldDefNumAvgSaturatedHemoglobinPercent = 87, + FITLapMesgFieldDefNumMinSaturatedHemoglobinPercent = 88, + FITLapMesgFieldDefNumMaxSaturatedHemoglobinPercent = 89, + FITLapMesgFieldDefNumAvgLeftTorqueEffectiveness = 91, + FITLapMesgFieldDefNumAvgRightTorqueEffectiveness = 92, + FITLapMesgFieldDefNumAvgLeftPedalSmoothness = 93, + FITLapMesgFieldDefNumAvgRightPedalSmoothness = 94, + FITLapMesgFieldDefNumAvgCombinedPedalSmoothness = 95, + FITLapMesgFieldDefNumTimeStanding = 98, + FITLapMesgFieldDefNumStandCount = 99, + FITLapMesgFieldDefNumAvgLeftPco = 100, + FITLapMesgFieldDefNumAvgRightPco = 101, + FITLapMesgFieldDefNumAvgLeftPowerPhase = 102, + FITLapMesgFieldDefNumAvgLeftPowerPhasePeak = 103, + FITLapMesgFieldDefNumAvgRightPowerPhase = 104, + FITLapMesgFieldDefNumAvgRightPowerPhasePeak = 105, + FITLapMesgFieldDefNumAvgPowerPosition = 106, + FITLapMesgFieldDefNumMaxPowerPosition = 107, + FITLapMesgFieldDefNumAvgCadencePosition = 108, + FITLapMesgFieldDefNumMaxCadencePosition = 109, + FITLapMesgFieldDefNumEnhancedAvgSpeed = 110, + FITLapMesgFieldDefNumEnhancedMaxSpeed = 111, + FITLapMesgFieldDefNumEnhancedAvgAltitude = 112, + FITLapMesgFieldDefNumEnhancedMinAltitude = 113, + FITLapMesgFieldDefNumEnhancedMaxAltitude = 114, + FITLapMesgFieldDefNumAvgLevMotorPower = 115, + FITLapMesgFieldDefNumMaxLevMotorPower = 116, + FITLapMesgFieldDefNumLevBatteryConsumption = 117, + FITLapMesgFieldDefNumAvgVerticalRatio = 118, + FITLapMesgFieldDefNumAvgStanceTimeBalance = 119, + FITLapMesgFieldDefNumAvgStepLength = 120, + FITLapMesgFieldDefNumAvgVam = 121, + FITLapMesgFieldDefNumTotalGrit = 149, + FITLapMesgFieldDefNumTotalFlow = 150, + FITLapMesgFieldDefNumJumpCount = 151, + FITLapMesgFieldDefNumAvgGrit = 153, + FITLapMesgFieldDefNumAvgFlow = 154, + FITLapMesgFieldDefNumTotalFractionalAscent = 156, + FITLapMesgFieldDefNumTotalFractionalDescent = 157, + FITLapMesgFieldDefNumAvgCoreTemperature = 158, + FITLapMesgFieldDefNumMinCoreTemperature = 159, + FITLapMesgFieldDefNumMaxCoreTemperature = 160, +} FITLapMesgFieldDefNum; + +typedef enum FITLapMesgTotalCyclesField : uint8_t { + FITLapMesgTotalCyclesFieldTotalStridesSubField, + FITLapMesgTotalCyclesFieldTotalStrokesSubField, +} FITLapMesgTotalCyclesField; + +typedef enum FITLapMesgAvgCadenceField : uint8_t { + FITLapMesgAvgCadenceFieldAvgRunningCadenceSubField, +} FITLapMesgAvgCadenceField; + +typedef enum FITLapMesgMaxCadenceField : uint8_t { + FITLapMesgMaxCadenceFieldMaxRunningCadenceSubField, +} FITLapMesgMaxCadenceField; + +// LengthMesg Field Definition Numbers +typedef enum FITLengthMesgFieldDefNum : uint8_t { + FITLengthMesgFieldDefNumMessageIndex = 254, + FITLengthMesgFieldDefNumTimestamp = 253, + FITLengthMesgFieldDefNumEvent = 0, + FITLengthMesgFieldDefNumEventType = 1, + FITLengthMesgFieldDefNumStartTime = 2, + FITLengthMesgFieldDefNumTotalElapsedTime = 3, + FITLengthMesgFieldDefNumTotalTimerTime = 4, + FITLengthMesgFieldDefNumTotalStrokes = 5, + FITLengthMesgFieldDefNumAvgSpeed = 6, + FITLengthMesgFieldDefNumSwimStroke = 7, + FITLengthMesgFieldDefNumAvgSwimmingCadence = 9, + FITLengthMesgFieldDefNumEventGroup = 10, + FITLengthMesgFieldDefNumTotalCalories = 11, + FITLengthMesgFieldDefNumLengthType = 12, + FITLengthMesgFieldDefNumPlayerScore = 18, + FITLengthMesgFieldDefNumOpponentScore = 19, + FITLengthMesgFieldDefNumStrokeCount = 20, + FITLengthMesgFieldDefNumZoneCount = 21, +} FITLengthMesgFieldDefNum; + +// RecordMesg Field Definition Numbers +typedef enum FITRecordMesgFieldDefNum : uint8_t { + FITRecordMesgFieldDefNumTimestamp = 253, + FITRecordMesgFieldDefNumPositionLat = 0, + FITRecordMesgFieldDefNumPositionLong = 1, + FITRecordMesgFieldDefNumAltitude = 2, + FITRecordMesgFieldDefNumHeartRate = 3, + FITRecordMesgFieldDefNumCadence = 4, + FITRecordMesgFieldDefNumDistance = 5, + FITRecordMesgFieldDefNumSpeed = 6, + FITRecordMesgFieldDefNumPower = 7, + FITRecordMesgFieldDefNumCompressedSpeedDistance = 8, + FITRecordMesgFieldDefNumGrade = 9, + FITRecordMesgFieldDefNumResistance = 10, + FITRecordMesgFieldDefNumTimeFromCourse = 11, + FITRecordMesgFieldDefNumCycleLength = 12, + FITRecordMesgFieldDefNumTemperature = 13, + FITRecordMesgFieldDefNumSpeed1s = 17, + FITRecordMesgFieldDefNumCycles = 18, + FITRecordMesgFieldDefNumTotalCycles = 19, + FITRecordMesgFieldDefNumCompressedAccumulatedPower = 28, + FITRecordMesgFieldDefNumAccumulatedPower = 29, + FITRecordMesgFieldDefNumLeftRightBalance = 30, + FITRecordMesgFieldDefNumGpsAccuracy = 31, + FITRecordMesgFieldDefNumVerticalSpeed = 32, + FITRecordMesgFieldDefNumCalories = 33, + FITRecordMesgFieldDefNumVerticalOscillation = 39, + FITRecordMesgFieldDefNumStanceTimePercent = 40, + FITRecordMesgFieldDefNumStanceTime = 41, + FITRecordMesgFieldDefNumActivityType = 42, + FITRecordMesgFieldDefNumLeftTorqueEffectiveness = 43, + FITRecordMesgFieldDefNumRightTorqueEffectiveness = 44, + FITRecordMesgFieldDefNumLeftPedalSmoothness = 45, + FITRecordMesgFieldDefNumRightPedalSmoothness = 46, + FITRecordMesgFieldDefNumCombinedPedalSmoothness = 47, + FITRecordMesgFieldDefNumTime128 = 48, + FITRecordMesgFieldDefNumStrokeType = 49, + FITRecordMesgFieldDefNumZone = 50, + FITRecordMesgFieldDefNumBallSpeed = 51, + FITRecordMesgFieldDefNumCadence256 = 52, + FITRecordMesgFieldDefNumFractionalCadence = 53, + FITRecordMesgFieldDefNumTotalHemoglobinConc = 54, + FITRecordMesgFieldDefNumTotalHemoglobinConcMin = 55, + FITRecordMesgFieldDefNumTotalHemoglobinConcMax = 56, + FITRecordMesgFieldDefNumSaturatedHemoglobinPercent = 57, + FITRecordMesgFieldDefNumSaturatedHemoglobinPercentMin = 58, + FITRecordMesgFieldDefNumSaturatedHemoglobinPercentMax = 59, + FITRecordMesgFieldDefNumDeviceIndex = 62, + FITRecordMesgFieldDefNumLeftPco = 67, + FITRecordMesgFieldDefNumRightPco = 68, + FITRecordMesgFieldDefNumLeftPowerPhase = 69, + FITRecordMesgFieldDefNumLeftPowerPhasePeak = 70, + FITRecordMesgFieldDefNumRightPowerPhase = 71, + FITRecordMesgFieldDefNumRightPowerPhasePeak = 72, + FITRecordMesgFieldDefNumEnhancedSpeed = 73, + FITRecordMesgFieldDefNumEnhancedAltitude = 78, + FITRecordMesgFieldDefNumBatterySoc = 81, + FITRecordMesgFieldDefNumMotorPower = 82, + FITRecordMesgFieldDefNumVerticalRatio = 83, + FITRecordMesgFieldDefNumStanceTimeBalance = 84, + FITRecordMesgFieldDefNumStepLength = 85, + FITRecordMesgFieldDefNumAbsolutePressure = 91, + FITRecordMesgFieldDefNumDepth = 92, + FITRecordMesgFieldDefNumNextStopDepth = 93, + FITRecordMesgFieldDefNumNextStopTime = 94, + FITRecordMesgFieldDefNumTimeToSurface = 95, + FITRecordMesgFieldDefNumNdlTime = 96, + FITRecordMesgFieldDefNumCnsLoad = 97, + FITRecordMesgFieldDefNumN2Load = 98, + FITRecordMesgFieldDefNumGrit = 114, + FITRecordMesgFieldDefNumFlow = 115, + FITRecordMesgFieldDefNumEbikeTravelRange = 117, + FITRecordMesgFieldDefNumEbikeBatteryLevel = 118, + FITRecordMesgFieldDefNumEbikeAssistMode = 119, + FITRecordMesgFieldDefNumEbikeAssistLevelPercent = 120, + FITRecordMesgFieldDefNumCoreTemperature = 139, +} FITRecordMesgFieldDefNum; + +// EventMesg Field Definition Numbers +typedef enum FITEventMesgFieldDefNum : uint8_t { + FITEventMesgFieldDefNumTimestamp = 253, + FITEventMesgFieldDefNumEvent = 0, + FITEventMesgFieldDefNumEventType = 1, + FITEventMesgFieldDefNumData16 = 2, + FITEventMesgFieldDefNumData = 3, + FITEventMesgFieldDefNumEventGroup = 4, + FITEventMesgFieldDefNumScore = 7, + FITEventMesgFieldDefNumOpponentScore = 8, + FITEventMesgFieldDefNumFrontGearNum = 9, + FITEventMesgFieldDefNumFrontGear = 10, + FITEventMesgFieldDefNumRearGearNum = 11, + FITEventMesgFieldDefNumRearGear = 12, + FITEventMesgFieldDefNumDeviceIndex = 13, + FITEventMesgFieldDefNumRadarThreatLevelMax = 21, + FITEventMesgFieldDefNumRadarThreatCount = 22, + FITEventMesgFieldDefNumRadarThreatAvgApproachSpeed = 23, + FITEventMesgFieldDefNumRadarThreatMaxApproachSpeed = 24, +} FITEventMesgFieldDefNum; + +typedef enum FITEventMesgDataField : uint8_t { + FITEventMesgDataFieldTimerTriggerSubField, + FITEventMesgDataFieldCoursePointIndexSubField, + FITEventMesgDataFieldBatteryLevelSubField, + FITEventMesgDataFieldVirtualPartnerSpeedSubField, + FITEventMesgDataFieldHrHighAlertSubField, + FITEventMesgDataFieldHrLowAlertSubField, + FITEventMesgDataFieldSpeedHighAlertSubField, + FITEventMesgDataFieldSpeedLowAlertSubField, + FITEventMesgDataFieldCadHighAlertSubField, + FITEventMesgDataFieldCadLowAlertSubField, + FITEventMesgDataFieldPowerHighAlertSubField, + FITEventMesgDataFieldPowerLowAlertSubField, + FITEventMesgDataFieldTimeDurationAlertSubField, + FITEventMesgDataFieldDistanceDurationAlertSubField, + FITEventMesgDataFieldCalorieDurationAlertSubField, + FITEventMesgDataFieldFitnessEquipmentStateSubField, + FITEventMesgDataFieldSportPointSubField, + FITEventMesgDataFieldGearChangeDataSubField, + FITEventMesgDataFieldRiderPositionSubField, + FITEventMesgDataFieldCommTimeoutSubField, + FITEventMesgDataFieldRadarThreatAlertSubField, +} FITEventMesgDataField; + +// DeviceInfoMesg Field Definition Numbers +typedef enum FITDeviceInfoMesgFieldDefNum : uint8_t { + FITDeviceInfoMesgFieldDefNumTimestamp = 253, + FITDeviceInfoMesgFieldDefNumDeviceIndex = 0, + FITDeviceInfoMesgFieldDefNumDeviceType = 1, + FITDeviceInfoMesgFieldDefNumManufacturer = 2, + FITDeviceInfoMesgFieldDefNumSerialNumber = 3, + FITDeviceInfoMesgFieldDefNumProduct = 4, + FITDeviceInfoMesgFieldDefNumSoftwareVersion = 5, + FITDeviceInfoMesgFieldDefNumHardwareVersion = 6, + FITDeviceInfoMesgFieldDefNumCumOperatingTime = 7, + FITDeviceInfoMesgFieldDefNumBatteryVoltage = 10, + FITDeviceInfoMesgFieldDefNumBatteryStatus = 11, + FITDeviceInfoMesgFieldDefNumSensorPosition = 18, + FITDeviceInfoMesgFieldDefNumDescriptor = 19, + FITDeviceInfoMesgFieldDefNumAntTransmissionType = 20, + FITDeviceInfoMesgFieldDefNumAntDeviceNumber = 21, + FITDeviceInfoMesgFieldDefNumAntNetwork = 22, + FITDeviceInfoMesgFieldDefNumSourceType = 25, + FITDeviceInfoMesgFieldDefNumProductName = 27, + FITDeviceInfoMesgFieldDefNumBatteryLevel = 32, +} FITDeviceInfoMesgFieldDefNum; + +typedef enum FITDeviceInfoMesgDeviceTypeField : uint8_t { + FITDeviceInfoMesgDeviceTypeFieldAntplusDeviceTypeSubField, + FITDeviceInfoMesgDeviceTypeFieldAntDeviceTypeSubField, +} FITDeviceInfoMesgDeviceTypeField; + +typedef enum FITDeviceInfoMesgProductField : uint8_t { + FITDeviceInfoMesgProductFieldFaveroProductSubField, + FITDeviceInfoMesgProductFieldGarminProductSubField, +} FITDeviceInfoMesgProductField; + +// DeviceAuxBatteryInfoMesg Field Definition Numbers +typedef enum FITDeviceAuxBatteryInfoMesgFieldDefNum : uint8_t { + FITDeviceAuxBatteryInfoMesgFieldDefNumTimestamp = 253, + FITDeviceAuxBatteryInfoMesgFieldDefNumDeviceIndex = 0, + FITDeviceAuxBatteryInfoMesgFieldDefNumBatteryVoltage = 1, + FITDeviceAuxBatteryInfoMesgFieldDefNumBatteryStatus = 2, + FITDeviceAuxBatteryInfoMesgFieldDefNumBatteryIdentifier = 3, +} FITDeviceAuxBatteryInfoMesgFieldDefNum; + +// TrainingFileMesg Field Definition Numbers +typedef enum FITTrainingFileMesgFieldDefNum : uint8_t { + FITTrainingFileMesgFieldDefNumTimestamp = 253, + FITTrainingFileMesgFieldDefNumType = 0, + FITTrainingFileMesgFieldDefNumManufacturer = 1, + FITTrainingFileMesgFieldDefNumProduct = 2, + FITTrainingFileMesgFieldDefNumSerialNumber = 3, + FITTrainingFileMesgFieldDefNumTimeCreated = 4, +} FITTrainingFileMesgFieldDefNum; + +typedef enum FITTrainingFileMesgProductField : uint8_t { + FITTrainingFileMesgProductFieldFaveroProductSubField, + FITTrainingFileMesgProductFieldGarminProductSubField, +} FITTrainingFileMesgProductField; + +// WeatherConditionsMesg Field Definition Numbers +typedef enum FITWeatherConditionsMesgFieldDefNum : uint8_t { + FITWeatherConditionsMesgFieldDefNumTimestamp = 253, + FITWeatherConditionsMesgFieldDefNumWeatherReport = 0, + FITWeatherConditionsMesgFieldDefNumTemperature = 1, + FITWeatherConditionsMesgFieldDefNumCondition = 2, + FITWeatherConditionsMesgFieldDefNumWindDirection = 3, + FITWeatherConditionsMesgFieldDefNumWindSpeed = 4, + FITWeatherConditionsMesgFieldDefNumPrecipitationProbability = 5, + FITWeatherConditionsMesgFieldDefNumTemperatureFeelsLike = 6, + FITWeatherConditionsMesgFieldDefNumRelativeHumidity = 7, + FITWeatherConditionsMesgFieldDefNumLocation = 8, + FITWeatherConditionsMesgFieldDefNumObservedAtTime = 9, + FITWeatherConditionsMesgFieldDefNumObservedLocationLat = 10, + FITWeatherConditionsMesgFieldDefNumObservedLocationLong = 11, + FITWeatherConditionsMesgFieldDefNumDayOfWeek = 12, + FITWeatherConditionsMesgFieldDefNumHighTemperature = 13, + FITWeatherConditionsMesgFieldDefNumLowTemperature = 14, +} FITWeatherConditionsMesgFieldDefNum; + +// WeatherAlertMesg Field Definition Numbers +typedef enum FITWeatherAlertMesgFieldDefNum : uint8_t { + FITWeatherAlertMesgFieldDefNumTimestamp = 253, + FITWeatherAlertMesgFieldDefNumReportId = 0, + FITWeatherAlertMesgFieldDefNumIssueTime = 1, + FITWeatherAlertMesgFieldDefNumExpireTime = 2, + FITWeatherAlertMesgFieldDefNumSeverity = 3, + FITWeatherAlertMesgFieldDefNumType = 4, +} FITWeatherAlertMesgFieldDefNum; + +// GpsMetadataMesg Field Definition Numbers +typedef enum FITGpsMetadataMesgFieldDefNum : uint8_t { + FITGpsMetadataMesgFieldDefNumTimestamp = 253, + FITGpsMetadataMesgFieldDefNumTimestampMs = 0, + FITGpsMetadataMesgFieldDefNumPositionLat = 1, + FITGpsMetadataMesgFieldDefNumPositionLong = 2, + FITGpsMetadataMesgFieldDefNumEnhancedAltitude = 3, + FITGpsMetadataMesgFieldDefNumEnhancedSpeed = 4, + FITGpsMetadataMesgFieldDefNumHeading = 5, + FITGpsMetadataMesgFieldDefNumUtcTimestamp = 6, + FITGpsMetadataMesgFieldDefNumVelocity = 7, +} FITGpsMetadataMesgFieldDefNum; + +// CameraEventMesg Field Definition Numbers +typedef enum FITCameraEventMesgFieldDefNum : uint8_t { + FITCameraEventMesgFieldDefNumTimestamp = 253, + FITCameraEventMesgFieldDefNumTimestampMs = 0, + FITCameraEventMesgFieldDefNumCameraEventType = 1, + FITCameraEventMesgFieldDefNumCameraFileUuid = 2, + FITCameraEventMesgFieldDefNumCameraOrientation = 3, +} FITCameraEventMesgFieldDefNum; + +// GyroscopeDataMesg Field Definition Numbers +typedef enum FITGyroscopeDataMesgFieldDefNum : uint8_t { + FITGyroscopeDataMesgFieldDefNumTimestamp = 253, + FITGyroscopeDataMesgFieldDefNumTimestampMs = 0, + FITGyroscopeDataMesgFieldDefNumSampleTimeOffset = 1, + FITGyroscopeDataMesgFieldDefNumGyroX = 2, + FITGyroscopeDataMesgFieldDefNumGyroY = 3, + FITGyroscopeDataMesgFieldDefNumGyroZ = 4, + FITGyroscopeDataMesgFieldDefNumCalibratedGyroX = 5, + FITGyroscopeDataMesgFieldDefNumCalibratedGyroY = 6, + FITGyroscopeDataMesgFieldDefNumCalibratedGyroZ = 7, +} FITGyroscopeDataMesgFieldDefNum; + +// AccelerometerDataMesg Field Definition Numbers +typedef enum FITAccelerometerDataMesgFieldDefNum : uint8_t { + FITAccelerometerDataMesgFieldDefNumTimestamp = 253, + FITAccelerometerDataMesgFieldDefNumTimestampMs = 0, + FITAccelerometerDataMesgFieldDefNumSampleTimeOffset = 1, + FITAccelerometerDataMesgFieldDefNumAccelX = 2, + FITAccelerometerDataMesgFieldDefNumAccelY = 3, + FITAccelerometerDataMesgFieldDefNumAccelZ = 4, + FITAccelerometerDataMesgFieldDefNumCalibratedAccelX = 5, + FITAccelerometerDataMesgFieldDefNumCalibratedAccelY = 6, + FITAccelerometerDataMesgFieldDefNumCalibratedAccelZ = 7, + FITAccelerometerDataMesgFieldDefNumCompressedCalibratedAccelX = 8, + FITAccelerometerDataMesgFieldDefNumCompressedCalibratedAccelY = 9, + FITAccelerometerDataMesgFieldDefNumCompressedCalibratedAccelZ = 10, +} FITAccelerometerDataMesgFieldDefNum; + +// MagnetometerDataMesg Field Definition Numbers +typedef enum FITMagnetometerDataMesgFieldDefNum : uint8_t { + FITMagnetometerDataMesgFieldDefNumTimestamp = 253, + FITMagnetometerDataMesgFieldDefNumTimestampMs = 0, + FITMagnetometerDataMesgFieldDefNumSampleTimeOffset = 1, + FITMagnetometerDataMesgFieldDefNumMagX = 2, + FITMagnetometerDataMesgFieldDefNumMagY = 3, + FITMagnetometerDataMesgFieldDefNumMagZ = 4, + FITMagnetometerDataMesgFieldDefNumCalibratedMagX = 5, + FITMagnetometerDataMesgFieldDefNumCalibratedMagY = 6, + FITMagnetometerDataMesgFieldDefNumCalibratedMagZ = 7, +} FITMagnetometerDataMesgFieldDefNum; + +// BarometerDataMesg Field Definition Numbers +typedef enum FITBarometerDataMesgFieldDefNum : uint8_t { + FITBarometerDataMesgFieldDefNumTimestamp = 253, + FITBarometerDataMesgFieldDefNumTimestampMs = 0, + FITBarometerDataMesgFieldDefNumSampleTimeOffset = 1, + FITBarometerDataMesgFieldDefNumBaroPres = 2, +} FITBarometerDataMesgFieldDefNum; + +// ThreeDSensorCalibrationMesg Field Definition Numbers +typedef enum FITThreeDSensorCalibrationMesgFieldDefNum : uint8_t { + FITThreeDSensorCalibrationMesgFieldDefNumTimestamp = 253, + FITThreeDSensorCalibrationMesgFieldDefNumSensorType = 0, + FITThreeDSensorCalibrationMesgFieldDefNumCalibrationFactor = 1, + FITThreeDSensorCalibrationMesgFieldDefNumCalibrationDivisor = 2, + FITThreeDSensorCalibrationMesgFieldDefNumLevelShift = 3, + FITThreeDSensorCalibrationMesgFieldDefNumOffsetCal = 4, + FITThreeDSensorCalibrationMesgFieldDefNumOrientationMatrix = 5, +} FITThreeDSensorCalibrationMesgFieldDefNum; + +typedef enum FITThreeDSensorCalibrationMesgCalibrationFactorField : uint8_t { + FITThreeDSensorCalibrationMesgCalibrationFactorFieldAccelCalFactorSubField, + FITThreeDSensorCalibrationMesgCalibrationFactorFieldGyroCalFactorSubField, +} FITThreeDSensorCalibrationMesgCalibrationFactorField; + +// OneDSensorCalibrationMesg Field Definition Numbers +typedef enum FITOneDSensorCalibrationMesgFieldDefNum : uint8_t { + FITOneDSensorCalibrationMesgFieldDefNumTimestamp = 253, + FITOneDSensorCalibrationMesgFieldDefNumSensorType = 0, + FITOneDSensorCalibrationMesgFieldDefNumCalibrationFactor = 1, + FITOneDSensorCalibrationMesgFieldDefNumCalibrationDivisor = 2, + FITOneDSensorCalibrationMesgFieldDefNumLevelShift = 3, + FITOneDSensorCalibrationMesgFieldDefNumOffsetCal = 4, +} FITOneDSensorCalibrationMesgFieldDefNum; + +typedef enum FITOneDSensorCalibrationMesgCalibrationFactorField : uint8_t { + FITOneDSensorCalibrationMesgCalibrationFactorFieldBaroCalFactorSubField, +} FITOneDSensorCalibrationMesgCalibrationFactorField; + +// VideoFrameMesg Field Definition Numbers +typedef enum FITVideoFrameMesgFieldDefNum : uint8_t { + FITVideoFrameMesgFieldDefNumTimestamp = 253, + FITVideoFrameMesgFieldDefNumTimestampMs = 0, + FITVideoFrameMesgFieldDefNumFrameNumber = 1, +} FITVideoFrameMesgFieldDefNum; + +// ObdiiDataMesg Field Definition Numbers +typedef enum FITObdiiDataMesgFieldDefNum : uint8_t { + FITObdiiDataMesgFieldDefNumTimestamp = 253, + FITObdiiDataMesgFieldDefNumTimestampMs = 0, + FITObdiiDataMesgFieldDefNumTimeOffset = 1, + FITObdiiDataMesgFieldDefNumPid = 2, + FITObdiiDataMesgFieldDefNumRawData = 3, + FITObdiiDataMesgFieldDefNumPidDataSize = 4, + FITObdiiDataMesgFieldDefNumSystemTime = 5, + FITObdiiDataMesgFieldDefNumStartTimestamp = 6, + FITObdiiDataMesgFieldDefNumStartTimestampMs = 7, +} FITObdiiDataMesgFieldDefNum; + +// NmeaSentenceMesg Field Definition Numbers +typedef enum FITNmeaSentenceMesgFieldDefNum : uint8_t { + FITNmeaSentenceMesgFieldDefNumTimestamp = 253, + FITNmeaSentenceMesgFieldDefNumTimestampMs = 0, + FITNmeaSentenceMesgFieldDefNumSentence = 1, +} FITNmeaSentenceMesgFieldDefNum; + +// AviationAttitudeMesg Field Definition Numbers +typedef enum FITAviationAttitudeMesgFieldDefNum : uint8_t { + FITAviationAttitudeMesgFieldDefNumTimestamp = 253, + FITAviationAttitudeMesgFieldDefNumTimestampMs = 0, + FITAviationAttitudeMesgFieldDefNumSystemTime = 1, + FITAviationAttitudeMesgFieldDefNumPitch = 2, + FITAviationAttitudeMesgFieldDefNumRoll = 3, + FITAviationAttitudeMesgFieldDefNumAccelLateral = 4, + FITAviationAttitudeMesgFieldDefNumAccelNormal = 5, + FITAviationAttitudeMesgFieldDefNumTurnRate = 6, + FITAviationAttitudeMesgFieldDefNumStage = 7, + FITAviationAttitudeMesgFieldDefNumAttitudeStageComplete = 8, + FITAviationAttitudeMesgFieldDefNumTrack = 9, + FITAviationAttitudeMesgFieldDefNumValidity = 10, +} FITAviationAttitudeMesgFieldDefNum; + +// VideoMesg Field Definition Numbers +typedef enum FITVideoMesgFieldDefNum : uint8_t { + FITVideoMesgFieldDefNumUrl = 0, + FITVideoMesgFieldDefNumHostingProvider = 1, + FITVideoMesgFieldDefNumDuration = 2, +} FITVideoMesgFieldDefNum; + +// VideoTitleMesg Field Definition Numbers +typedef enum FITVideoTitleMesgFieldDefNum : uint8_t { + FITVideoTitleMesgFieldDefNumMessageIndex = 254, + FITVideoTitleMesgFieldDefNumMessageCount = 0, + FITVideoTitleMesgFieldDefNumText = 1, +} FITVideoTitleMesgFieldDefNum; + +// VideoDescriptionMesg Field Definition Numbers +typedef enum FITVideoDescriptionMesgFieldDefNum : uint8_t { + FITVideoDescriptionMesgFieldDefNumMessageIndex = 254, + FITVideoDescriptionMesgFieldDefNumMessageCount = 0, + FITVideoDescriptionMesgFieldDefNumText = 1, +} FITVideoDescriptionMesgFieldDefNum; + +// VideoClipMesg Field Definition Numbers +typedef enum FITVideoClipMesgFieldDefNum : uint8_t { + FITVideoClipMesgFieldDefNumClipNumber = 0, + FITVideoClipMesgFieldDefNumStartTimestamp = 1, + FITVideoClipMesgFieldDefNumStartTimestampMs = 2, + FITVideoClipMesgFieldDefNumEndTimestamp = 3, + FITVideoClipMesgFieldDefNumEndTimestampMs = 4, + FITVideoClipMesgFieldDefNumClipStart = 6, + FITVideoClipMesgFieldDefNumClipEnd = 7, +} FITVideoClipMesgFieldDefNum; + +// SetMesg Field Definition Numbers +typedef enum FITSetMesgFieldDefNum : uint8_t { + FITSetMesgFieldDefNumTimestamp = 254, + FITSetMesgFieldDefNumDuration = 0, + FITSetMesgFieldDefNumRepetitions = 3, + FITSetMesgFieldDefNumWeight = 4, + FITSetMesgFieldDefNumSetType = 5, + FITSetMesgFieldDefNumStartTime = 6, + FITSetMesgFieldDefNumCategory = 7, + FITSetMesgFieldDefNumCategorySubtype = 8, + FITSetMesgFieldDefNumWeightDisplayUnit = 9, + FITSetMesgFieldDefNumMessageIndex = 10, + FITSetMesgFieldDefNumWktStepIndex = 11, +} FITSetMesgFieldDefNum; + +// JumpMesg Field Definition Numbers +typedef enum FITJumpMesgFieldDefNum : uint8_t { + FITJumpMesgFieldDefNumTimestamp = 253, + FITJumpMesgFieldDefNumDistance = 0, + FITJumpMesgFieldDefNumHeight = 1, + FITJumpMesgFieldDefNumRotations = 2, + FITJumpMesgFieldDefNumHangTime = 3, + FITJumpMesgFieldDefNumScore = 4, + FITJumpMesgFieldDefNumPositionLat = 5, + FITJumpMesgFieldDefNumPositionLong = 6, + FITJumpMesgFieldDefNumSpeed = 7, + FITJumpMesgFieldDefNumEnhancedSpeed = 8, +} FITJumpMesgFieldDefNum; + +// ClimbProMesg Field Definition Numbers +typedef enum FITClimbProMesgFieldDefNum : uint8_t { + FITClimbProMesgFieldDefNumTimestamp = 253, + FITClimbProMesgFieldDefNumPositionLat = 0, + FITClimbProMesgFieldDefNumPositionLong = 1, + FITClimbProMesgFieldDefNumClimbProEvent = 2, + FITClimbProMesgFieldDefNumClimbNumber = 3, + FITClimbProMesgFieldDefNumClimbCategory = 4, + FITClimbProMesgFieldDefNumCurrentDist = 5, +} FITClimbProMesgFieldDefNum; + +// FieldDescriptionMesg Field Definition Numbers +typedef enum FITFieldDescriptionMesgFieldDefNum : uint8_t { + FITFieldDescriptionMesgFieldDefNumDeveloperDataIndex = 0, + FITFieldDescriptionMesgFieldDefNumFieldDefinitionNumber = 1, + FITFieldDescriptionMesgFieldDefNumFitBaseTypeId = 2, + FITFieldDescriptionMesgFieldDefNumFieldName = 3, + FITFieldDescriptionMesgFieldDefNumArray = 4, + FITFieldDescriptionMesgFieldDefNumComponents = 5, + FITFieldDescriptionMesgFieldDefNumScale = 6, + FITFieldDescriptionMesgFieldDefNumOffset = 7, + FITFieldDescriptionMesgFieldDefNumUnits = 8, + FITFieldDescriptionMesgFieldDefNumBits = 9, + FITFieldDescriptionMesgFieldDefNumAccumulate = 10, + FITFieldDescriptionMesgFieldDefNumFitBaseUnitId = 13, + FITFieldDescriptionMesgFieldDefNumNativeMesgNum = 14, + FITFieldDescriptionMesgFieldDefNumNativeFieldNum = 15, +} FITFieldDescriptionMesgFieldDefNum; + +// DeveloperDataIdMesg Field Definition Numbers +typedef enum FITDeveloperDataIdMesgFieldDefNum : uint8_t { + FITDeveloperDataIdMesgFieldDefNumDeveloperId = 0, + FITDeveloperDataIdMesgFieldDefNumApplicationId = 1, + FITDeveloperDataIdMesgFieldDefNumManufacturerId = 2, + FITDeveloperDataIdMesgFieldDefNumDeveloperDataIndex = 3, + FITDeveloperDataIdMesgFieldDefNumApplicationVersion = 4, +} FITDeveloperDataIdMesgFieldDefNum; + +// CourseMesg Field Definition Numbers +typedef enum FITCourseMesgFieldDefNum : uint8_t { + FITCourseMesgFieldDefNumSport = 4, + FITCourseMesgFieldDefNumName = 5, + FITCourseMesgFieldDefNumCapabilities = 6, + FITCourseMesgFieldDefNumSubSport = 7, +} FITCourseMesgFieldDefNum; + +// CoursePointMesg Field Definition Numbers +typedef enum FITCoursePointMesgFieldDefNum : uint8_t { + FITCoursePointMesgFieldDefNumMessageIndex = 254, + FITCoursePointMesgFieldDefNumTimestamp = 1, + FITCoursePointMesgFieldDefNumPositionLat = 2, + FITCoursePointMesgFieldDefNumPositionLong = 3, + FITCoursePointMesgFieldDefNumDistance = 4, + FITCoursePointMesgFieldDefNumType = 5, + FITCoursePointMesgFieldDefNumName = 6, + FITCoursePointMesgFieldDefNumFavorite = 8, +} FITCoursePointMesgFieldDefNum; + +// SegmentIdMesg Field Definition Numbers +typedef enum FITSegmentIdMesgFieldDefNum : uint8_t { + FITSegmentIdMesgFieldDefNumName = 0, + FITSegmentIdMesgFieldDefNumUuid = 1, + FITSegmentIdMesgFieldDefNumSport = 2, + FITSegmentIdMesgFieldDefNumEnabled = 3, + FITSegmentIdMesgFieldDefNumUserProfilePrimaryKey = 4, + FITSegmentIdMesgFieldDefNumDeviceId = 5, + FITSegmentIdMesgFieldDefNumDefaultRaceLeader = 6, + FITSegmentIdMesgFieldDefNumDeleteStatus = 7, + FITSegmentIdMesgFieldDefNumSelectionType = 8, +} FITSegmentIdMesgFieldDefNum; + +// SegmentLeaderboardEntryMesg Field Definition Numbers +typedef enum FITSegmentLeaderboardEntryMesgFieldDefNum : uint8_t { + FITSegmentLeaderboardEntryMesgFieldDefNumMessageIndex = 254, + FITSegmentLeaderboardEntryMesgFieldDefNumName = 0, + FITSegmentLeaderboardEntryMesgFieldDefNumType = 1, + FITSegmentLeaderboardEntryMesgFieldDefNumGroupPrimaryKey = 2, + FITSegmentLeaderboardEntryMesgFieldDefNumActivityId = 3, + FITSegmentLeaderboardEntryMesgFieldDefNumSegmentTime = 4, + FITSegmentLeaderboardEntryMesgFieldDefNumActivityIdString = 5, +} FITSegmentLeaderboardEntryMesgFieldDefNum; + +// SegmentPointMesg Field Definition Numbers +typedef enum FITSegmentPointMesgFieldDefNum : uint8_t { + FITSegmentPointMesgFieldDefNumMessageIndex = 254, + FITSegmentPointMesgFieldDefNumPositionLat = 1, + FITSegmentPointMesgFieldDefNumPositionLong = 2, + FITSegmentPointMesgFieldDefNumDistance = 3, + FITSegmentPointMesgFieldDefNumAltitude = 4, + FITSegmentPointMesgFieldDefNumLeaderTime = 5, +} FITSegmentPointMesgFieldDefNum; + +// SegmentLapMesg Field Definition Numbers +typedef enum FITSegmentLapMesgFieldDefNum : uint8_t { + FITSegmentLapMesgFieldDefNumMessageIndex = 254, + FITSegmentLapMesgFieldDefNumTimestamp = 253, + FITSegmentLapMesgFieldDefNumEvent = 0, + FITSegmentLapMesgFieldDefNumEventType = 1, + FITSegmentLapMesgFieldDefNumStartTime = 2, + FITSegmentLapMesgFieldDefNumStartPositionLat = 3, + FITSegmentLapMesgFieldDefNumStartPositionLong = 4, + FITSegmentLapMesgFieldDefNumEndPositionLat = 5, + FITSegmentLapMesgFieldDefNumEndPositionLong = 6, + FITSegmentLapMesgFieldDefNumTotalElapsedTime = 7, + FITSegmentLapMesgFieldDefNumTotalTimerTime = 8, + FITSegmentLapMesgFieldDefNumTotalDistance = 9, + FITSegmentLapMesgFieldDefNumTotalCycles = 10, + FITSegmentLapMesgFieldDefNumTotalCalories = 11, + FITSegmentLapMesgFieldDefNumTotalFatCalories = 12, + FITSegmentLapMesgFieldDefNumAvgSpeed = 13, + FITSegmentLapMesgFieldDefNumMaxSpeed = 14, + FITSegmentLapMesgFieldDefNumAvgHeartRate = 15, + FITSegmentLapMesgFieldDefNumMaxHeartRate = 16, + FITSegmentLapMesgFieldDefNumAvgCadence = 17, + FITSegmentLapMesgFieldDefNumMaxCadence = 18, + FITSegmentLapMesgFieldDefNumAvgPower = 19, + FITSegmentLapMesgFieldDefNumMaxPower = 20, + FITSegmentLapMesgFieldDefNumTotalAscent = 21, + FITSegmentLapMesgFieldDefNumTotalDescent = 22, + FITSegmentLapMesgFieldDefNumSport = 23, + FITSegmentLapMesgFieldDefNumEventGroup = 24, + FITSegmentLapMesgFieldDefNumNecLat = 25, + FITSegmentLapMesgFieldDefNumNecLong = 26, + FITSegmentLapMesgFieldDefNumSwcLat = 27, + FITSegmentLapMesgFieldDefNumSwcLong = 28, + FITSegmentLapMesgFieldDefNumName = 29, + FITSegmentLapMesgFieldDefNumNormalizedPower = 30, + FITSegmentLapMesgFieldDefNumLeftRightBalance = 31, + FITSegmentLapMesgFieldDefNumSubSport = 32, + FITSegmentLapMesgFieldDefNumTotalWork = 33, + FITSegmentLapMesgFieldDefNumAvgAltitude = 34, + FITSegmentLapMesgFieldDefNumMaxAltitude = 35, + FITSegmentLapMesgFieldDefNumGpsAccuracy = 36, + FITSegmentLapMesgFieldDefNumAvgGrade = 37, + FITSegmentLapMesgFieldDefNumAvgPosGrade = 38, + FITSegmentLapMesgFieldDefNumAvgNegGrade = 39, + FITSegmentLapMesgFieldDefNumMaxPosGrade = 40, + FITSegmentLapMesgFieldDefNumMaxNegGrade = 41, + FITSegmentLapMesgFieldDefNumAvgTemperature = 42, + FITSegmentLapMesgFieldDefNumMaxTemperature = 43, + FITSegmentLapMesgFieldDefNumTotalMovingTime = 44, + FITSegmentLapMesgFieldDefNumAvgPosVerticalSpeed = 45, + FITSegmentLapMesgFieldDefNumAvgNegVerticalSpeed = 46, + FITSegmentLapMesgFieldDefNumMaxPosVerticalSpeed = 47, + FITSegmentLapMesgFieldDefNumMaxNegVerticalSpeed = 48, + FITSegmentLapMesgFieldDefNumTimeInHrZone = 49, + FITSegmentLapMesgFieldDefNumTimeInSpeedZone = 50, + FITSegmentLapMesgFieldDefNumTimeInCadenceZone = 51, + FITSegmentLapMesgFieldDefNumTimeInPowerZone = 52, + FITSegmentLapMesgFieldDefNumRepetitionNum = 53, + FITSegmentLapMesgFieldDefNumMinAltitude = 54, + FITSegmentLapMesgFieldDefNumMinHeartRate = 55, + FITSegmentLapMesgFieldDefNumActiveTime = 56, + FITSegmentLapMesgFieldDefNumWktStepIndex = 57, + FITSegmentLapMesgFieldDefNumSportEvent = 58, + FITSegmentLapMesgFieldDefNumAvgLeftTorqueEffectiveness = 59, + FITSegmentLapMesgFieldDefNumAvgRightTorqueEffectiveness = 60, + FITSegmentLapMesgFieldDefNumAvgLeftPedalSmoothness = 61, + FITSegmentLapMesgFieldDefNumAvgRightPedalSmoothness = 62, + FITSegmentLapMesgFieldDefNumAvgCombinedPedalSmoothness = 63, + FITSegmentLapMesgFieldDefNumStatus = 64, + FITSegmentLapMesgFieldDefNumUuid = 65, + FITSegmentLapMesgFieldDefNumAvgFractionalCadence = 66, + FITSegmentLapMesgFieldDefNumMaxFractionalCadence = 67, + FITSegmentLapMesgFieldDefNumTotalFractionalCycles = 68, + FITSegmentLapMesgFieldDefNumFrontGearShiftCount = 69, + FITSegmentLapMesgFieldDefNumRearGearShiftCount = 70, + FITSegmentLapMesgFieldDefNumTimeStanding = 71, + FITSegmentLapMesgFieldDefNumStandCount = 72, + FITSegmentLapMesgFieldDefNumAvgLeftPco = 73, + FITSegmentLapMesgFieldDefNumAvgRightPco = 74, + FITSegmentLapMesgFieldDefNumAvgLeftPowerPhase = 75, + FITSegmentLapMesgFieldDefNumAvgLeftPowerPhasePeak = 76, + FITSegmentLapMesgFieldDefNumAvgRightPowerPhase = 77, + FITSegmentLapMesgFieldDefNumAvgRightPowerPhasePeak = 78, + FITSegmentLapMesgFieldDefNumAvgPowerPosition = 79, + FITSegmentLapMesgFieldDefNumMaxPowerPosition = 80, + FITSegmentLapMesgFieldDefNumAvgCadencePosition = 81, + FITSegmentLapMesgFieldDefNumMaxCadencePosition = 82, + FITSegmentLapMesgFieldDefNumManufacturer = 83, + FITSegmentLapMesgFieldDefNumTotalGrit = 84, + FITSegmentLapMesgFieldDefNumTotalFlow = 85, + FITSegmentLapMesgFieldDefNumAvgGrit = 86, + FITSegmentLapMesgFieldDefNumAvgFlow = 87, + FITSegmentLapMesgFieldDefNumTotalFractionalAscent = 89, + FITSegmentLapMesgFieldDefNumTotalFractionalDescent = 90, +} FITSegmentLapMesgFieldDefNum; + +typedef enum FITSegmentLapMesgTotalCyclesField : uint8_t { + FITSegmentLapMesgTotalCyclesFieldTotalStrokesSubField, +} FITSegmentLapMesgTotalCyclesField; + +// SegmentFileMesg Field Definition Numbers +typedef enum FITSegmentFileMesgFieldDefNum : uint8_t { + FITSegmentFileMesgFieldDefNumMessageIndex = 254, + FITSegmentFileMesgFieldDefNumFileUuid = 1, + FITSegmentFileMesgFieldDefNumEnabled = 3, + FITSegmentFileMesgFieldDefNumUserProfilePrimaryKey = 4, + FITSegmentFileMesgFieldDefNumLeaderType = 7, + FITSegmentFileMesgFieldDefNumLeaderGroupPrimaryKey = 8, + FITSegmentFileMesgFieldDefNumLeaderActivityId = 9, + FITSegmentFileMesgFieldDefNumLeaderActivityIdString = 10, + FITSegmentFileMesgFieldDefNumDefaultRaceLeader = 11, +} FITSegmentFileMesgFieldDefNum; + +// WorkoutMesg Field Definition Numbers +typedef enum FITWorkoutMesgFieldDefNum : uint8_t { + FITWorkoutMesgFieldDefNumSport = 4, + FITWorkoutMesgFieldDefNumCapabilities = 5, + FITWorkoutMesgFieldDefNumNumValidSteps = 6, + FITWorkoutMesgFieldDefNumWktName = 8, + FITWorkoutMesgFieldDefNumSubSport = 11, + FITWorkoutMesgFieldDefNumPoolLength = 14, + FITWorkoutMesgFieldDefNumPoolLengthUnit = 15, +} FITWorkoutMesgFieldDefNum; + +// WorkoutSessionMesg Field Definition Numbers +typedef enum FITWorkoutSessionMesgFieldDefNum : uint8_t { + FITWorkoutSessionMesgFieldDefNumMessageIndex = 254, + FITWorkoutSessionMesgFieldDefNumSport = 0, + FITWorkoutSessionMesgFieldDefNumSubSport = 1, + FITWorkoutSessionMesgFieldDefNumNumValidSteps = 2, + FITWorkoutSessionMesgFieldDefNumFirstStepIndex = 3, + FITWorkoutSessionMesgFieldDefNumPoolLength = 4, + FITWorkoutSessionMesgFieldDefNumPoolLengthUnit = 5, +} FITWorkoutSessionMesgFieldDefNum; + +// WorkoutStepMesg Field Definition Numbers +typedef enum FITWorkoutStepMesgFieldDefNum : uint8_t { + FITWorkoutStepMesgFieldDefNumMessageIndex = 254, + FITWorkoutStepMesgFieldDefNumWktStepName = 0, + FITWorkoutStepMesgFieldDefNumDurationType = 1, + FITWorkoutStepMesgFieldDefNumDurationValue = 2, + FITWorkoutStepMesgFieldDefNumTargetType = 3, + FITWorkoutStepMesgFieldDefNumTargetValue = 4, + FITWorkoutStepMesgFieldDefNumCustomTargetValueLow = 5, + FITWorkoutStepMesgFieldDefNumCustomTargetValueHigh = 6, + FITWorkoutStepMesgFieldDefNumIntensity = 7, + FITWorkoutStepMesgFieldDefNumNotes = 8, + FITWorkoutStepMesgFieldDefNumEquipment = 9, + FITWorkoutStepMesgFieldDefNumExerciseCategory = 10, + FITWorkoutStepMesgFieldDefNumExerciseName = 11, + FITWorkoutStepMesgFieldDefNumExerciseWeight = 12, + FITWorkoutStepMesgFieldDefNumWeightDisplayUnit = 13, + FITWorkoutStepMesgFieldDefNumSecondaryTargetType = 19, + FITWorkoutStepMesgFieldDefNumSecondaryTargetValue = 20, + FITWorkoutStepMesgFieldDefNumSecondaryCustomTargetValueLow = 21, + FITWorkoutStepMesgFieldDefNumSecondaryCustomTargetValueHigh = 22, +} FITWorkoutStepMesgFieldDefNum; + +typedef enum FITWorkoutStepMesgDurationValueField : uint8_t { + FITWorkoutStepMesgDurationValueFieldDurationTimeSubField, + FITWorkoutStepMesgDurationValueFieldDurationDistanceSubField, + FITWorkoutStepMesgDurationValueFieldDurationHrSubField, + FITWorkoutStepMesgDurationValueFieldDurationCaloriesSubField, + FITWorkoutStepMesgDurationValueFieldDurationStepSubField, + FITWorkoutStepMesgDurationValueFieldDurationPowerSubField, + FITWorkoutStepMesgDurationValueFieldDurationRepsSubField, +} FITWorkoutStepMesgDurationValueField; + +typedef enum FITWorkoutStepMesgTargetValueField : uint8_t { + FITWorkoutStepMesgTargetValueFieldTargetSpeedZoneSubField, + FITWorkoutStepMesgTargetValueFieldTargetHrZoneSubField, + FITWorkoutStepMesgTargetValueFieldTargetCadenceZoneSubField, + FITWorkoutStepMesgTargetValueFieldTargetPowerZoneSubField, + FITWorkoutStepMesgTargetValueFieldRepeatStepsSubField, + FITWorkoutStepMesgTargetValueFieldRepeatTimeSubField, + FITWorkoutStepMesgTargetValueFieldRepeatDistanceSubField, + FITWorkoutStepMesgTargetValueFieldRepeatCaloriesSubField, + FITWorkoutStepMesgTargetValueFieldRepeatHrSubField, + FITWorkoutStepMesgTargetValueFieldRepeatPowerSubField, + FITWorkoutStepMesgTargetValueFieldTargetStrokeTypeSubField, +} FITWorkoutStepMesgTargetValueField; + +typedef enum FITWorkoutStepMesgCustomTargetValueLowField : uint8_t { + FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetSpeedLowSubField, + FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetHeartRateLowSubField, + FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetCadenceLowSubField, + FITWorkoutStepMesgCustomTargetValueLowFieldCustomTargetPowerLowSubField, +} FITWorkoutStepMesgCustomTargetValueLowField; + +typedef enum FITWorkoutStepMesgCustomTargetValueHighField : uint8_t { + FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetSpeedHighSubField, + FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetHeartRateHighSubField, + FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetCadenceHighSubField, + FITWorkoutStepMesgCustomTargetValueHighFieldCustomTargetPowerHighSubField, +} FITWorkoutStepMesgCustomTargetValueHighField; + +typedef enum FITWorkoutStepMesgSecondaryTargetValueField : uint8_t { + FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetSpeedZoneSubField, + FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetHrZoneSubField, + FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetCadenceZoneSubField, + FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetPowerZoneSubField, + FITWorkoutStepMesgSecondaryTargetValueFieldSecondaryTargetStrokeTypeSubField, +} FITWorkoutStepMesgSecondaryTargetValueField; + +typedef enum FITWorkoutStepMesgSecondaryCustomTargetValueLowField : uint8_t { + FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetSpeedLowSubField, + FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetHeartRateLowSubField, + FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetCadenceLowSubField, + FITWorkoutStepMesgSecondaryCustomTargetValueLowFieldSecondaryCustomTargetPowerLowSubField, +} FITWorkoutStepMesgSecondaryCustomTargetValueLowField; + +typedef enum FITWorkoutStepMesgSecondaryCustomTargetValueHighField : uint8_t { + FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetSpeedHighSubField, + FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetHeartRateHighSubField, + FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetCadenceHighSubField, + FITWorkoutStepMesgSecondaryCustomTargetValueHighFieldSecondaryCustomTargetPowerHighSubField, +} FITWorkoutStepMesgSecondaryCustomTargetValueHighField; + +// ExerciseTitleMesg Field Definition Numbers +typedef enum FITExerciseTitleMesgFieldDefNum : uint8_t { + FITExerciseTitleMesgFieldDefNumMessageIndex = 254, + FITExerciseTitleMesgFieldDefNumExerciseCategory = 0, + FITExerciseTitleMesgFieldDefNumExerciseName = 1, + FITExerciseTitleMesgFieldDefNumWktStepName = 2, +} FITExerciseTitleMesgFieldDefNum; + +// ScheduleMesg Field Definition Numbers +typedef enum FITScheduleMesgFieldDefNum : uint8_t { + FITScheduleMesgFieldDefNumManufacturer = 0, + FITScheduleMesgFieldDefNumProduct = 1, + FITScheduleMesgFieldDefNumSerialNumber = 2, + FITScheduleMesgFieldDefNumTimeCreated = 3, + FITScheduleMesgFieldDefNumCompleted = 4, + FITScheduleMesgFieldDefNumType = 5, + FITScheduleMesgFieldDefNumScheduledTime = 6, +} FITScheduleMesgFieldDefNum; + +typedef enum FITScheduleMesgProductField : uint8_t { + FITScheduleMesgProductFieldFaveroProductSubField, + FITScheduleMesgProductFieldGarminProductSubField, +} FITScheduleMesgProductField; + +// TotalsMesg Field Definition Numbers +typedef enum FITTotalsMesgFieldDefNum : uint8_t { + FITTotalsMesgFieldDefNumMessageIndex = 254, + FITTotalsMesgFieldDefNumTimestamp = 253, + FITTotalsMesgFieldDefNumTimerTime = 0, + FITTotalsMesgFieldDefNumDistance = 1, + FITTotalsMesgFieldDefNumCalories = 2, + FITTotalsMesgFieldDefNumSport = 3, + FITTotalsMesgFieldDefNumElapsedTime = 4, + FITTotalsMesgFieldDefNumSessions = 5, + FITTotalsMesgFieldDefNumActiveTime = 6, + FITTotalsMesgFieldDefNumSportIndex = 9, +} FITTotalsMesgFieldDefNum; + +// WeightScaleMesg Field Definition Numbers +typedef enum FITWeightScaleMesgFieldDefNum : uint8_t { + FITWeightScaleMesgFieldDefNumTimestamp = 253, + FITWeightScaleMesgFieldDefNumWeight = 0, + FITWeightScaleMesgFieldDefNumPercentFat = 1, + FITWeightScaleMesgFieldDefNumPercentHydration = 2, + FITWeightScaleMesgFieldDefNumVisceralFatMass = 3, + FITWeightScaleMesgFieldDefNumBoneMass = 4, + FITWeightScaleMesgFieldDefNumMuscleMass = 5, + FITWeightScaleMesgFieldDefNumBasalMet = 7, + FITWeightScaleMesgFieldDefNumPhysiqueRating = 8, + FITWeightScaleMesgFieldDefNumActiveMet = 9, + FITWeightScaleMesgFieldDefNumMetabolicAge = 10, + FITWeightScaleMesgFieldDefNumVisceralFatRating = 11, + FITWeightScaleMesgFieldDefNumUserProfileIndex = 12, +} FITWeightScaleMesgFieldDefNum; + +// BloodPressureMesg Field Definition Numbers +typedef enum FITBloodPressureMesgFieldDefNum : uint8_t { + FITBloodPressureMesgFieldDefNumTimestamp = 253, + FITBloodPressureMesgFieldDefNumSystolicPressure = 0, + FITBloodPressureMesgFieldDefNumDiastolicPressure = 1, + FITBloodPressureMesgFieldDefNumMeanArterialPressure = 2, + FITBloodPressureMesgFieldDefNumMap3SampleMean = 3, + FITBloodPressureMesgFieldDefNumMapMorningValues = 4, + FITBloodPressureMesgFieldDefNumMapEveningValues = 5, + FITBloodPressureMesgFieldDefNumHeartRate = 6, + FITBloodPressureMesgFieldDefNumHeartRateType = 7, + FITBloodPressureMesgFieldDefNumStatus = 8, + FITBloodPressureMesgFieldDefNumUserProfileIndex = 9, +} FITBloodPressureMesgFieldDefNum; + +// MonitoringInfoMesg Field Definition Numbers +typedef enum FITMonitoringInfoMesgFieldDefNum : uint8_t { + FITMonitoringInfoMesgFieldDefNumTimestamp = 253, + FITMonitoringInfoMesgFieldDefNumLocalTimestamp = 0, + FITMonitoringInfoMesgFieldDefNumActivityType = 1, + FITMonitoringInfoMesgFieldDefNumCyclesToDistance = 3, + FITMonitoringInfoMesgFieldDefNumCyclesToCalories = 4, + FITMonitoringInfoMesgFieldDefNumRestingMetabolicRate = 5, +} FITMonitoringInfoMesgFieldDefNum; + +// MonitoringMesg Field Definition Numbers +typedef enum FITMonitoringMesgFieldDefNum : uint8_t { + FITMonitoringMesgFieldDefNumTimestamp = 253, + FITMonitoringMesgFieldDefNumDeviceIndex = 0, + FITMonitoringMesgFieldDefNumCalories = 1, + FITMonitoringMesgFieldDefNumDistance = 2, + FITMonitoringMesgFieldDefNumCycles = 3, + FITMonitoringMesgFieldDefNumActiveTime = 4, + FITMonitoringMesgFieldDefNumActivityType = 5, + FITMonitoringMesgFieldDefNumActivitySubtype = 6, + FITMonitoringMesgFieldDefNumActivityLevel = 7, + FITMonitoringMesgFieldDefNumDistance16 = 8, + FITMonitoringMesgFieldDefNumCycles16 = 9, + FITMonitoringMesgFieldDefNumActiveTime16 = 10, + FITMonitoringMesgFieldDefNumLocalTimestamp = 11, + FITMonitoringMesgFieldDefNumTemperature = 12, + FITMonitoringMesgFieldDefNumTemperatureMin = 14, + FITMonitoringMesgFieldDefNumTemperatureMax = 15, + FITMonitoringMesgFieldDefNumActivityTime = 16, + FITMonitoringMesgFieldDefNumActiveCalories = 19, + FITMonitoringMesgFieldDefNumCurrentActivityTypeIntensity = 24, + FITMonitoringMesgFieldDefNumTimestampMin8 = 25, + FITMonitoringMesgFieldDefNumTimestamp16 = 26, + FITMonitoringMesgFieldDefNumHeartRate = 27, + FITMonitoringMesgFieldDefNumIntensity = 28, + FITMonitoringMesgFieldDefNumDurationMin = 29, + FITMonitoringMesgFieldDefNumDuration = 30, + FITMonitoringMesgFieldDefNumAscent = 31, + FITMonitoringMesgFieldDefNumDescent = 32, + FITMonitoringMesgFieldDefNumModerateActivityMinutes = 33, + FITMonitoringMesgFieldDefNumVigorousActivityMinutes = 34, +} FITMonitoringMesgFieldDefNum; + +typedef enum FITMonitoringMesgCyclesField : uint8_t { + FITMonitoringMesgCyclesFieldStepsSubField, + FITMonitoringMesgCyclesFieldStrokesSubField, +} FITMonitoringMesgCyclesField; + +// HrMesg Field Definition Numbers +typedef enum FITHrMesgFieldDefNum : uint8_t { + FITHrMesgFieldDefNumTimestamp = 253, + FITHrMesgFieldDefNumFractionalTimestamp = 0, + FITHrMesgFieldDefNumTime256 = 1, + FITHrMesgFieldDefNumFilteredBpm = 6, + FITHrMesgFieldDefNumEventTimestamp = 9, + FITHrMesgFieldDefNumEventTimestamp12 = 10, +} FITHrMesgFieldDefNum; + +// StressLevelMesg Field Definition Numbers +typedef enum FITStressLevelMesgFieldDefNum : uint8_t { + FITStressLevelMesgFieldDefNumStressLevelValue = 0, + FITStressLevelMesgFieldDefNumStressLevelTime = 1, +} FITStressLevelMesgFieldDefNum; + +// MemoGlobMesg Field Definition Numbers +typedef enum FITMemoGlobMesgFieldDefNum : uint8_t { + FITMemoGlobMesgFieldDefNumPartIndex = 250, + FITMemoGlobMesgFieldDefNumMemo = 0, + FITMemoGlobMesgFieldDefNumMesgNum = 1, + FITMemoGlobMesgFieldDefNumParentIndex = 2, + FITMemoGlobMesgFieldDefNumFieldNum = 3, + FITMemoGlobMesgFieldDefNumData = 4, +} FITMemoGlobMesgFieldDefNum; + +// AntChannelIdMesg Field Definition Numbers +typedef enum FITAntChannelIdMesgFieldDefNum : uint8_t { + FITAntChannelIdMesgFieldDefNumChannelNumber = 0, + FITAntChannelIdMesgFieldDefNumDeviceType = 1, + FITAntChannelIdMesgFieldDefNumDeviceNumber = 2, + FITAntChannelIdMesgFieldDefNumTransmissionType = 3, + FITAntChannelIdMesgFieldDefNumDeviceIndex = 4, +} FITAntChannelIdMesgFieldDefNum; + +// AntRxMesg Field Definition Numbers +typedef enum FITAntRxMesgFieldDefNum : uint8_t { + FITAntRxMesgFieldDefNumTimestamp = 253, + FITAntRxMesgFieldDefNumFractionalTimestamp = 0, + FITAntRxMesgFieldDefNumMesgId = 1, + FITAntRxMesgFieldDefNumMesgData = 2, + FITAntRxMesgFieldDefNumChannelNumber = 3, + FITAntRxMesgFieldDefNumData = 4, +} FITAntRxMesgFieldDefNum; + +// AntTxMesg Field Definition Numbers +typedef enum FITAntTxMesgFieldDefNum : uint8_t { + FITAntTxMesgFieldDefNumTimestamp = 253, + FITAntTxMesgFieldDefNumFractionalTimestamp = 0, + FITAntTxMesgFieldDefNumMesgId = 1, + FITAntTxMesgFieldDefNumMesgData = 2, + FITAntTxMesgFieldDefNumChannelNumber = 3, + FITAntTxMesgFieldDefNumData = 4, +} FITAntTxMesgFieldDefNum; + +// ExdScreenConfigurationMesg Field Definition Numbers +typedef enum FITExdScreenConfigurationMesgFieldDefNum : uint8_t { + FITExdScreenConfigurationMesgFieldDefNumScreenIndex = 0, + FITExdScreenConfigurationMesgFieldDefNumFieldCount = 1, + FITExdScreenConfigurationMesgFieldDefNumLayout = 2, + FITExdScreenConfigurationMesgFieldDefNumScreenEnabled = 3, +} FITExdScreenConfigurationMesgFieldDefNum; + +// ExdDataFieldConfigurationMesg Field Definition Numbers +typedef enum FITExdDataFieldConfigurationMesgFieldDefNum : uint8_t { + FITExdDataFieldConfigurationMesgFieldDefNumScreenIndex = 0, + FITExdDataFieldConfigurationMesgFieldDefNumConceptField = 1, + FITExdDataFieldConfigurationMesgFieldDefNumFieldId = 2, + FITExdDataFieldConfigurationMesgFieldDefNumConceptCount = 3, + FITExdDataFieldConfigurationMesgFieldDefNumDisplayType = 4, + FITExdDataFieldConfigurationMesgFieldDefNumTitle = 5, +} FITExdDataFieldConfigurationMesgFieldDefNum; + +// ExdDataConceptConfigurationMesg Field Definition Numbers +typedef enum FITExdDataConceptConfigurationMesgFieldDefNum : uint8_t { + FITExdDataConceptConfigurationMesgFieldDefNumScreenIndex = 0, + FITExdDataConceptConfigurationMesgFieldDefNumConceptField = 1, + FITExdDataConceptConfigurationMesgFieldDefNumFieldId = 2, + FITExdDataConceptConfigurationMesgFieldDefNumConceptIndex = 3, + FITExdDataConceptConfigurationMesgFieldDefNumDataPage = 4, + FITExdDataConceptConfigurationMesgFieldDefNumConceptKey = 5, + FITExdDataConceptConfigurationMesgFieldDefNumScaling = 6, + FITExdDataConceptConfigurationMesgFieldDefNumDataUnits = 8, + FITExdDataConceptConfigurationMesgFieldDefNumQualifier = 9, + FITExdDataConceptConfigurationMesgFieldDefNumDescriptor = 10, + FITExdDataConceptConfigurationMesgFieldDefNumIsSigned = 11, +} FITExdDataConceptConfigurationMesgFieldDefNum; + +// DiveSummaryMesg Field Definition Numbers +typedef enum FITDiveSummaryMesgFieldDefNum : uint8_t { + FITDiveSummaryMesgFieldDefNumTimestamp = 253, + FITDiveSummaryMesgFieldDefNumReferenceMesg = 0, + FITDiveSummaryMesgFieldDefNumReferenceIndex = 1, + FITDiveSummaryMesgFieldDefNumAvgDepth = 2, + FITDiveSummaryMesgFieldDefNumMaxDepth = 3, + FITDiveSummaryMesgFieldDefNumSurfaceInterval = 4, + FITDiveSummaryMesgFieldDefNumStartCns = 5, + FITDiveSummaryMesgFieldDefNumEndCns = 6, + FITDiveSummaryMesgFieldDefNumStartN2 = 7, + FITDiveSummaryMesgFieldDefNumEndN2 = 8, + FITDiveSummaryMesgFieldDefNumO2Toxicity = 9, + FITDiveSummaryMesgFieldDefNumDiveNumber = 10, + FITDiveSummaryMesgFieldDefNumBottomTime = 11, + FITDiveSummaryMesgFieldDefNumAvgAscentRate = 17, + FITDiveSummaryMesgFieldDefNumAvgDescentRate = 22, + FITDiveSummaryMesgFieldDefNumMaxAscentRate = 23, + FITDiveSummaryMesgFieldDefNumMaxDescentRate = 24, + FITDiveSummaryMesgFieldDefNumHangTime = 25, +} FITDiveSummaryMesgFieldDefNum; + +// HrvMesg Field Definition Numbers +typedef enum FITHrvMesgFieldDefNum : uint8_t { + FITHrvMesgFieldDefNumTime = 0, +} FITHrvMesgFieldDefNum; + diff --git a/Sources/ObjcFIT/include/FITUserProfileMesg.h b/Sources/ObjcFIT/include/FITUserProfileMesg.h new file mode 100644 index 0000000..eb06122 --- /dev/null +++ b/Sources/ObjcFIT/include/FITUserProfileMesg.h @@ -0,0 +1,142 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITUserProfileMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// FriendlyName +- (BOOL)isFriendlyNameValid; +- (NSString *)getFriendlyName; +- (void)setFriendlyName:(NSString *)friendlyName; +// Gender +- (BOOL)isGenderValid; +- (FITGender)getGender; +- (void)setGender:(FITGender)gender; +// Age +- (BOOL)isAgeValid; +- (FITUInt8)getAge; +- (void)setAge:(FITUInt8)age; +// Height +- (BOOL)isHeightValid; +- (FITFloat32)getHeight; +- (void)setHeight:(FITFloat32)height; +// Weight +- (BOOL)isWeightValid; +- (FITFloat32)getWeight; +- (void)setWeight:(FITFloat32)weight; +// Language +- (BOOL)isLanguageValid; +- (FITLanguage)getLanguage; +- (void)setLanguage:(FITLanguage)language; +// ElevSetting +- (BOOL)isElevSettingValid; +- (FITDisplayMeasure)getElevSetting; +- (void)setElevSetting:(FITDisplayMeasure)elevSetting; +// WeightSetting +- (BOOL)isWeightSettingValid; +- (FITDisplayMeasure)getWeightSetting; +- (void)setWeightSetting:(FITDisplayMeasure)weightSetting; +// RestingHeartRate +- (BOOL)isRestingHeartRateValid; +- (FITUInt8)getRestingHeartRate; +- (void)setRestingHeartRate:(FITUInt8)restingHeartRate; +// DefaultMaxRunningHeartRate +- (BOOL)isDefaultMaxRunningHeartRateValid; +- (FITUInt8)getDefaultMaxRunningHeartRate; +- (void)setDefaultMaxRunningHeartRate:(FITUInt8)defaultMaxRunningHeartRate; +// DefaultMaxBikingHeartRate +- (BOOL)isDefaultMaxBikingHeartRateValid; +- (FITUInt8)getDefaultMaxBikingHeartRate; +- (void)setDefaultMaxBikingHeartRate:(FITUInt8)defaultMaxBikingHeartRate; +// DefaultMaxHeartRate +- (BOOL)isDefaultMaxHeartRateValid; +- (FITUInt8)getDefaultMaxHeartRate; +- (void)setDefaultMaxHeartRate:(FITUInt8)defaultMaxHeartRate; +// HrSetting +- (BOOL)isHrSettingValid; +- (FITDisplayHeart)getHrSetting; +- (void)setHrSetting:(FITDisplayHeart)hrSetting; +// SpeedSetting +- (BOOL)isSpeedSettingValid; +- (FITDisplayMeasure)getSpeedSetting; +- (void)setSpeedSetting:(FITDisplayMeasure)speedSetting; +// DistSetting +- (BOOL)isDistSettingValid; +- (FITDisplayMeasure)getDistSetting; +- (void)setDistSetting:(FITDisplayMeasure)distSetting; +// PowerSetting +- (BOOL)isPowerSettingValid; +- (FITDisplayPower)getPowerSetting; +- (void)setPowerSetting:(FITDisplayPower)powerSetting; +// ActivityClass +- (BOOL)isActivityClassValid; +- (FITActivityClass)getActivityClass; +- (void)setActivityClass:(FITActivityClass)activityClass; +// PositionSetting +- (BOOL)isPositionSettingValid; +- (FITDisplayPosition)getPositionSetting; +- (void)setPositionSetting:(FITDisplayPosition)positionSetting; +// TemperatureSetting +- (BOOL)isTemperatureSettingValid; +- (FITDisplayMeasure)getTemperatureSetting; +- (void)setTemperatureSetting:(FITDisplayMeasure)temperatureSetting; +// LocalId +- (BOOL)isLocalIdValid; +- (FITUserLocalId)getLocalId; +- (void)setLocalId:(FITUserLocalId)localId; +// GlobalId +@property(readonly,nonatomic) uint8_t numGlobalIdValues; +- (BOOL)isGlobalIdValidforIndex : (uint8_t)index; +- (FITByte)getGlobalIdforIndex : (uint8_t)index; +- (void)setGlobalId:(FITByte)globalId forIndex:(uint8_t)index; +// WakeTime +- (BOOL)isWakeTimeValid; +- (FITLocaltimeIntoDay)getWakeTime; +- (void)setWakeTime:(FITLocaltimeIntoDay)wakeTime; +// SleepTime +- (BOOL)isSleepTimeValid; +- (FITLocaltimeIntoDay)getSleepTime; +- (void)setSleepTime:(FITLocaltimeIntoDay)sleepTime; +// HeightSetting +- (BOOL)isHeightSettingValid; +- (FITDisplayMeasure)getHeightSetting; +- (void)setHeightSetting:(FITDisplayMeasure)heightSetting; +// UserRunningStepLength +- (BOOL)isUserRunningStepLengthValid; +- (FITFloat32)getUserRunningStepLength; +- (void)setUserRunningStepLength:(FITFloat32)userRunningStepLength; +// UserWalkingStepLength +- (BOOL)isUserWalkingStepLengthValid; +- (FITFloat32)getUserWalkingStepLength; +- (void)setUserWalkingStepLength:(FITFloat32)userWalkingStepLength; +// DepthSetting +- (BOOL)isDepthSettingValid; +- (FITDisplayMeasure)getDepthSetting; +- (void)setDepthSetting:(FITDisplayMeasure)depthSetting; +// DiveCount +- (BOOL)isDiveCountValid; +- (FITUInt32)getDiveCount; +- (void)setDiveCount:(FITUInt32)diveCount; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITVideoClipMesg.h b/Sources/ObjcFIT/include/FITVideoClipMesg.h new file mode 100644 index 0000000..26e673b --- /dev/null +++ b/Sources/ObjcFIT/include/FITVideoClipMesg.h @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITVideoClipMesg : FITMessage +- (id)init; +// ClipNumber +- (BOOL)isClipNumberValid; +- (FITUInt16)getClipNumber; +- (void)setClipNumber:(FITUInt16)clipNumber; +// StartTimestamp +- (BOOL)isStartTimestampValid; +- (FITDate *)getStartTimestamp; +- (void)setStartTimestamp:(FITDate *)startTimestamp; +// StartTimestampMs +- (BOOL)isStartTimestampMsValid; +- (FITUInt16)getStartTimestampMs; +- (void)setStartTimestampMs:(FITUInt16)startTimestampMs; +// EndTimestamp +- (BOOL)isEndTimestampValid; +- (FITDate *)getEndTimestamp; +- (void)setEndTimestamp:(FITDate *)endTimestamp; +// EndTimestampMs +- (BOOL)isEndTimestampMsValid; +- (FITUInt16)getEndTimestampMs; +- (void)setEndTimestampMs:(FITUInt16)endTimestampMs; +// ClipStart +- (BOOL)isClipStartValid; +- (FITUInt32)getClipStart; +- (void)setClipStart:(FITUInt32)clipStart; +// ClipEnd +- (BOOL)isClipEndValid; +- (FITUInt32)getClipEnd; +- (void)setClipEnd:(FITUInt32)clipEnd; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITVideoDescriptionMesg.h b/Sources/ObjcFIT/include/FITVideoDescriptionMesg.h new file mode 100644 index 0000000..a4b281d --- /dev/null +++ b/Sources/ObjcFIT/include/FITVideoDescriptionMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITVideoDescriptionMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// MessageCount +- (BOOL)isMessageCountValid; +- (FITUInt16)getMessageCount; +- (void)setMessageCount:(FITUInt16)messageCount; +// Text +- (BOOL)isTextValid; +- (NSString *)getText; +- (void)setText:(NSString *)text; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITVideoFrameMesg.h b/Sources/ObjcFIT/include/FITVideoFrameMesg.h new file mode 100644 index 0000000..a8e54a1 --- /dev/null +++ b/Sources/ObjcFIT/include/FITVideoFrameMesg.h @@ -0,0 +1,38 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITVideoFrameMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// TimestampMs +- (BOOL)isTimestampMsValid; +- (FITUInt16)getTimestampMs; +- (void)setTimestampMs:(FITUInt16)timestampMs; +// FrameNumber +- (BOOL)isFrameNumberValid; +- (FITUInt32)getFrameNumber; +- (void)setFrameNumber:(FITUInt32)frameNumber; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITVideoMesg.h b/Sources/ObjcFIT/include/FITVideoMesg.h new file mode 100644 index 0000000..aba048d --- /dev/null +++ b/Sources/ObjcFIT/include/FITVideoMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITVideoMesg : FITMessage +- (id)init; +// Url +- (BOOL)isUrlValid; +- (NSString *)getUrl; +- (void)setUrl:(NSString *)url; +// HostingProvider +- (BOOL)isHostingProviderValid; +- (NSString *)getHostingProvider; +- (void)setHostingProvider:(NSString *)hostingProvider; +// Duration +- (BOOL)isDurationValid; +- (FITUInt32)getDuration; +- (void)setDuration:(FITUInt32)duration; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITVideoTitleMesg.h b/Sources/ObjcFIT/include/FITVideoTitleMesg.h new file mode 100644 index 0000000..5cbb59d --- /dev/null +++ b/Sources/ObjcFIT/include/FITVideoTitleMesg.h @@ -0,0 +1,37 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITVideoTitleMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// MessageCount +- (BOOL)isMessageCountValid; +- (FITUInt16)getMessageCount; +- (void)setMessageCount:(FITUInt16)messageCount; +// Text +- (BOOL)isTextValid; +- (NSString *)getText; +- (void)setText:(NSString *)text; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITWatchfaceSettingsMesg.h b/Sources/ObjcFIT/include/FITWatchfaceSettingsMesg.h new file mode 100644 index 0000000..d439e6a --- /dev/null +++ b/Sources/ObjcFIT/include/FITWatchfaceSettingsMesg.h @@ -0,0 +1,44 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITWatchfaceSettingsMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Mode +- (BOOL)isModeValid; +- (FITWatchfaceMode)getMode; +- (void)setMode:(FITWatchfaceMode)mode; +// Layout +- (BOOL)isLayoutValid; +- (FITByte)getLayout; +- (void)setLayout:(FITByte)layout; +// Layout Sub Fields +- (BOOL)isDigitalLayoutValid; +- (FITDigitalWatchfaceLayout) getDigitalLayout; +- (void)setDigitalLayout:(FITDigitalWatchfaceLayout)digitalLayout; +- (BOOL)isAnalogLayoutValid; +- (FITAnalogWatchfaceLayout) getAnalogLayout; +- (void)setAnalogLayout:(FITAnalogWatchfaceLayout)analogLayout; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITWeatherAlertMesg.h b/Sources/ObjcFIT/include/FITWeatherAlertMesg.h new file mode 100644 index 0000000..e27d9bb --- /dev/null +++ b/Sources/ObjcFIT/include/FITWeatherAlertMesg.h @@ -0,0 +1,50 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITWeatherAlertMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// ReportId +- (BOOL)isReportIdValid; +- (NSString *)getReportId; +- (void)setReportId:(NSString *)reportId; +// IssueTime +- (BOOL)isIssueTimeValid; +- (FITDate *)getIssueTime; +- (void)setIssueTime:(FITDate *)issueTime; +// ExpireTime +- (BOOL)isExpireTimeValid; +- (FITDate *)getExpireTime; +- (void)setExpireTime:(FITDate *)expireTime; +// Severity +- (BOOL)isSeverityValid; +- (FITWeatherSeverity)getSeverity; +- (void)setSeverity:(FITWeatherSeverity)severity; +// Type +- (BOOL)isTypeValid; +- (FITWeatherSevereType)getType; +- (void)setType:(FITWeatherSevereType)type; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITWeatherConditionsMesg.h b/Sources/ObjcFIT/include/FITWeatherConditionsMesg.h new file mode 100644 index 0000000..8ec5211 --- /dev/null +++ b/Sources/ObjcFIT/include/FITWeatherConditionsMesg.h @@ -0,0 +1,90 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITWeatherConditionsMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// WeatherReport +- (BOOL)isWeatherReportValid; +- (FITWeatherReport)getWeatherReport; +- (void)setWeatherReport:(FITWeatherReport)weatherReport; +// Temperature +- (BOOL)isTemperatureValid; +- (FITSInt8)getTemperature; +- (void)setTemperature:(FITSInt8)temperature; +// Condition +- (BOOL)isConditionValid; +- (FITWeatherStatus)getCondition; +- (void)setCondition:(FITWeatherStatus)condition; +// WindDirection +- (BOOL)isWindDirectionValid; +- (FITUInt16)getWindDirection; +- (void)setWindDirection:(FITUInt16)windDirection; +// WindSpeed +- (BOOL)isWindSpeedValid; +- (FITFloat32)getWindSpeed; +- (void)setWindSpeed:(FITFloat32)windSpeed; +// PrecipitationProbability +- (BOOL)isPrecipitationProbabilityValid; +- (FITUInt8)getPrecipitationProbability; +- (void)setPrecipitationProbability:(FITUInt8)precipitationProbability; +// TemperatureFeelsLike +- (BOOL)isTemperatureFeelsLikeValid; +- (FITSInt8)getTemperatureFeelsLike; +- (void)setTemperatureFeelsLike:(FITSInt8)temperatureFeelsLike; +// RelativeHumidity +- (BOOL)isRelativeHumidityValid; +- (FITUInt8)getRelativeHumidity; +- (void)setRelativeHumidity:(FITUInt8)relativeHumidity; +// Location +- (BOOL)isLocationValid; +- (NSString *)getLocation; +- (void)setLocation:(NSString *)location; +// ObservedAtTime +- (BOOL)isObservedAtTimeValid; +- (FITDate *)getObservedAtTime; +- (void)setObservedAtTime:(FITDate *)observedAtTime; +// ObservedLocationLat +- (BOOL)isObservedLocationLatValid; +- (FITSInt32)getObservedLocationLat; +- (void)setObservedLocationLat:(FITSInt32)observedLocationLat; +// ObservedLocationLong +- (BOOL)isObservedLocationLongValid; +- (FITSInt32)getObservedLocationLong; +- (void)setObservedLocationLong:(FITSInt32)observedLocationLong; +// DayOfWeek +- (BOOL)isDayOfWeekValid; +- (FITDayOfWeek)getDayOfWeek; +- (void)setDayOfWeek:(FITDayOfWeek)dayOfWeek; +// HighTemperature +- (BOOL)isHighTemperatureValid; +- (FITSInt8)getHighTemperature; +- (void)setHighTemperature:(FITSInt8)highTemperature; +// LowTemperature +- (BOOL)isLowTemperatureValid; +- (FITSInt8)getLowTemperature; +- (void)setLowTemperature:(FITSInt8)lowTemperature; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITWeightScaleMesg.h b/Sources/ObjcFIT/include/FITWeightScaleMesg.h new file mode 100644 index 0000000..d48e6d4 --- /dev/null +++ b/Sources/ObjcFIT/include/FITWeightScaleMesg.h @@ -0,0 +1,78 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITDate.h" +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITWeightScaleMesg : FITMessage +- (id)init; +// Timestamp +- (BOOL)isTimestampValid; +- (FITDate *)getTimestamp; +- (void)setTimestamp:(FITDate *)timestamp; +// Weight +- (BOOL)isWeightValid; +- (FITFloat32)getWeight; +- (void)setWeight:(FITFloat32)weight; +// PercentFat +- (BOOL)isPercentFatValid; +- (FITFloat32)getPercentFat; +- (void)setPercentFat:(FITFloat32)percentFat; +// PercentHydration +- (BOOL)isPercentHydrationValid; +- (FITFloat32)getPercentHydration; +- (void)setPercentHydration:(FITFloat32)percentHydration; +// VisceralFatMass +- (BOOL)isVisceralFatMassValid; +- (FITFloat32)getVisceralFatMass; +- (void)setVisceralFatMass:(FITFloat32)visceralFatMass; +// BoneMass +- (BOOL)isBoneMassValid; +- (FITFloat32)getBoneMass; +- (void)setBoneMass:(FITFloat32)boneMass; +// MuscleMass +- (BOOL)isMuscleMassValid; +- (FITFloat32)getMuscleMass; +- (void)setMuscleMass:(FITFloat32)muscleMass; +// BasalMet +- (BOOL)isBasalMetValid; +- (FITFloat32)getBasalMet; +- (void)setBasalMet:(FITFloat32)basalMet; +// PhysiqueRating +- (BOOL)isPhysiqueRatingValid; +- (FITUInt8)getPhysiqueRating; +- (void)setPhysiqueRating:(FITUInt8)physiqueRating; +// ActiveMet +- (BOOL)isActiveMetValid; +- (FITFloat32)getActiveMet; +- (void)setActiveMet:(FITFloat32)activeMet; +// MetabolicAge +- (BOOL)isMetabolicAgeValid; +- (FITUInt8)getMetabolicAge; +- (void)setMetabolicAge:(FITUInt8)metabolicAge; +// VisceralFatRating +- (BOOL)isVisceralFatRatingValid; +- (FITUInt8)getVisceralFatRating; +- (void)setVisceralFatRating:(FITUInt8)visceralFatRating; +// UserProfileIndex +- (BOOL)isUserProfileIndexValid; +- (FITMessageIndex)getUserProfileIndex; +- (void)setUserProfileIndex:(FITMessageIndex)userProfileIndex; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITWorkoutMesg.h b/Sources/ObjcFIT/include/FITWorkoutMesg.h new file mode 100644 index 0000000..202ca40 --- /dev/null +++ b/Sources/ObjcFIT/include/FITWorkoutMesg.h @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITWorkoutMesg : FITMessage +- (id)init; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// Capabilities +- (BOOL)isCapabilitiesValid; +- (FITWorkoutCapabilities)getCapabilities; +- (void)setCapabilities:(FITWorkoutCapabilities)capabilities; +// NumValidSteps +- (BOOL)isNumValidStepsValid; +- (FITUInt16)getNumValidSteps; +- (void)setNumValidSteps:(FITUInt16)numValidSteps; +// WktName +- (BOOL)isWktNameValid; +- (NSString *)getWktName; +- (void)setWktName:(NSString *)wktName; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// PoolLength +- (BOOL)isPoolLengthValid; +- (FITFloat32)getPoolLength; +- (void)setPoolLength:(FITFloat32)poolLength; +// PoolLengthUnit +- (BOOL)isPoolLengthUnitValid; +- (FITDisplayMeasure)getPoolLengthUnit; +- (void)setPoolLengthUnit:(FITDisplayMeasure)poolLengthUnit; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITWorkoutSessionMesg.h b/Sources/ObjcFIT/include/FITWorkoutSessionMesg.h new file mode 100644 index 0000000..31df626 --- /dev/null +++ b/Sources/ObjcFIT/include/FITWorkoutSessionMesg.h @@ -0,0 +1,53 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITWorkoutSessionMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// Sport +- (BOOL)isSportValid; +- (FITSport)getSport; +- (void)setSport:(FITSport)sport; +// SubSport +- (BOOL)isSubSportValid; +- (FITSubSport)getSubSport; +- (void)setSubSport:(FITSubSport)subSport; +// NumValidSteps +- (BOOL)isNumValidStepsValid; +- (FITUInt16)getNumValidSteps; +- (void)setNumValidSteps:(FITUInt16)numValidSteps; +// FirstStepIndex +- (BOOL)isFirstStepIndexValid; +- (FITUInt16)getFirstStepIndex; +- (void)setFirstStepIndex:(FITUInt16)firstStepIndex; +// PoolLength +- (BOOL)isPoolLengthValid; +- (FITFloat32)getPoolLength; +- (void)setPoolLength:(FITFloat32)poolLength; +// PoolLengthUnit +- (BOOL)isPoolLengthUnitValid; +- (FITDisplayMeasure)getPoolLengthUnit; +- (void)setPoolLengthUnit:(FITDisplayMeasure)poolLengthUnit; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITWorkoutStepMesg.h b/Sources/ObjcFIT/include/FITWorkoutStepMesg.h new file mode 100644 index 0000000..9c054b2 --- /dev/null +++ b/Sources/ObjcFIT/include/FITWorkoutStepMesg.h @@ -0,0 +1,225 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITWorkoutStepMesg : FITMessage +- (id)init; +// MessageIndex +- (BOOL)isMessageIndexValid; +- (FITMessageIndex)getMessageIndex; +- (void)setMessageIndex:(FITMessageIndex)messageIndex; +// WktStepName +- (BOOL)isWktStepNameValid; +- (NSString *)getWktStepName; +- (void)setWktStepName:(NSString *)wktStepName; +// DurationType +- (BOOL)isDurationTypeValid; +- (FITWktStepDuration)getDurationType; +- (void)setDurationType:(FITWktStepDuration)durationType; +// DurationValue +- (BOOL)isDurationValueValid; +- (FITUInt32)getDurationValue; +- (void)setDurationValue:(FITUInt32)durationValue; +// DurationValue Sub Fields +- (BOOL)isDurationTimeValid; +- (FITFloat32) getDurationTime; +- (void)setDurationTime:(FITFloat32)durationTime; +- (BOOL)isDurationDistanceValid; +- (FITFloat32) getDurationDistance; +- (void)setDurationDistance:(FITFloat32)durationDistance; +- (BOOL)isDurationHrValid; +- (FITWorkoutHr) getDurationHr; +- (void)setDurationHr:(FITWorkoutHr)durationHr; +- (BOOL)isDurationCaloriesValid; +- (FITUInt32) getDurationCalories; +- (void)setDurationCalories:(FITUInt32)durationCalories; +- (BOOL)isDurationStepValid; +- (FITUInt32) getDurationStep; +- (void)setDurationStep:(FITUInt32)durationStep; +- (BOOL)isDurationPowerValid; +- (FITWorkoutPower) getDurationPower; +- (void)setDurationPower:(FITWorkoutPower)durationPower; +- (BOOL)isDurationRepsValid; +- (FITUInt32) getDurationReps; +- (void)setDurationReps:(FITUInt32)durationReps; +// TargetType +- (BOOL)isTargetTypeValid; +- (FITWktStepTarget)getTargetType; +- (void)setTargetType:(FITWktStepTarget)targetType; +// TargetValue +- (BOOL)isTargetValueValid; +- (FITUInt32)getTargetValue; +- (void)setTargetValue:(FITUInt32)targetValue; +// TargetValue Sub Fields +- (BOOL)isTargetSpeedZoneValid; +- (FITUInt32) getTargetSpeedZone; +- (void)setTargetSpeedZone:(FITUInt32)targetSpeedZone; +- (BOOL)isTargetHrZoneValid; +- (FITUInt32) getTargetHrZone; +- (void)setTargetHrZone:(FITUInt32)targetHrZone; +- (BOOL)isTargetCadenceZoneValid; +- (FITUInt32) getTargetCadenceZone; +- (void)setTargetCadenceZone:(FITUInt32)targetCadenceZone; +- (BOOL)isTargetPowerZoneValid; +- (FITUInt32) getTargetPowerZone; +- (void)setTargetPowerZone:(FITUInt32)targetPowerZone; +- (BOOL)isRepeatStepsValid; +- (FITUInt32) getRepeatSteps; +- (void)setRepeatSteps:(FITUInt32)repeatSteps; +- (BOOL)isRepeatTimeValid; +- (FITFloat32) getRepeatTime; +- (void)setRepeatTime:(FITFloat32)repeatTime; +- (BOOL)isRepeatDistanceValid; +- (FITFloat32) getRepeatDistance; +- (void)setRepeatDistance:(FITFloat32)repeatDistance; +- (BOOL)isRepeatCaloriesValid; +- (FITUInt32) getRepeatCalories; +- (void)setRepeatCalories:(FITUInt32)repeatCalories; +- (BOOL)isRepeatHrValid; +- (FITWorkoutHr) getRepeatHr; +- (void)setRepeatHr:(FITWorkoutHr)repeatHr; +- (BOOL)isRepeatPowerValid; +- (FITWorkoutPower) getRepeatPower; +- (void)setRepeatPower:(FITWorkoutPower)repeatPower; +- (BOOL)isTargetStrokeTypeValid; +- (FITSwimStroke) getTargetStrokeType; +- (void)setTargetStrokeType:(FITSwimStroke)targetStrokeType; +// CustomTargetValueLow +- (BOOL)isCustomTargetValueLowValid; +- (FITUInt32)getCustomTargetValueLow; +- (void)setCustomTargetValueLow:(FITUInt32)customTargetValueLow; +// CustomTargetValueLow Sub Fields +- (BOOL)isCustomTargetSpeedLowValid; +- (FITFloat32) getCustomTargetSpeedLow; +- (void)setCustomTargetSpeedLow:(FITFloat32)customTargetSpeedLow; +- (BOOL)isCustomTargetHeartRateLowValid; +- (FITWorkoutHr) getCustomTargetHeartRateLow; +- (void)setCustomTargetHeartRateLow:(FITWorkoutHr)customTargetHeartRateLow; +- (BOOL)isCustomTargetCadenceLowValid; +- (FITUInt32) getCustomTargetCadenceLow; +- (void)setCustomTargetCadenceLow:(FITUInt32)customTargetCadenceLow; +- (BOOL)isCustomTargetPowerLowValid; +- (FITWorkoutPower) getCustomTargetPowerLow; +- (void)setCustomTargetPowerLow:(FITWorkoutPower)customTargetPowerLow; +// CustomTargetValueHigh +- (BOOL)isCustomTargetValueHighValid; +- (FITUInt32)getCustomTargetValueHigh; +- (void)setCustomTargetValueHigh:(FITUInt32)customTargetValueHigh; +// CustomTargetValueHigh Sub Fields +- (BOOL)isCustomTargetSpeedHighValid; +- (FITFloat32) getCustomTargetSpeedHigh; +- (void)setCustomTargetSpeedHigh:(FITFloat32)customTargetSpeedHigh; +- (BOOL)isCustomTargetHeartRateHighValid; +- (FITWorkoutHr) getCustomTargetHeartRateHigh; +- (void)setCustomTargetHeartRateHigh:(FITWorkoutHr)customTargetHeartRateHigh; +- (BOOL)isCustomTargetCadenceHighValid; +- (FITUInt32) getCustomTargetCadenceHigh; +- (void)setCustomTargetCadenceHigh:(FITUInt32)customTargetCadenceHigh; +- (BOOL)isCustomTargetPowerHighValid; +- (FITWorkoutPower) getCustomTargetPowerHigh; +- (void)setCustomTargetPowerHigh:(FITWorkoutPower)customTargetPowerHigh; +// Intensity +- (BOOL)isIntensityValid; +- (FITIntensity)getIntensity; +- (void)setIntensity:(FITIntensity)intensity; +// Notes +- (BOOL)isNotesValid; +- (NSString *)getNotes; +- (void)setNotes:(NSString *)notes; +// Equipment +- (BOOL)isEquipmentValid; +- (FITWorkoutEquipment)getEquipment; +- (void)setEquipment:(FITWorkoutEquipment)equipment; +// ExerciseCategory +- (BOOL)isExerciseCategoryValid; +- (FITExerciseCategory)getExerciseCategory; +- (void)setExerciseCategory:(FITExerciseCategory)exerciseCategory; +// ExerciseName +- (BOOL)isExerciseNameValid; +- (FITUInt16)getExerciseName; +- (void)setExerciseName:(FITUInt16)exerciseName; +// ExerciseWeight +- (BOOL)isExerciseWeightValid; +- (FITFloat32)getExerciseWeight; +- (void)setExerciseWeight:(FITFloat32)exerciseWeight; +// WeightDisplayUnit +- (BOOL)isWeightDisplayUnitValid; +- (FITFitBaseUnit)getWeightDisplayUnit; +- (void)setWeightDisplayUnit:(FITFitBaseUnit)weightDisplayUnit; +// SecondaryTargetType +- (BOOL)isSecondaryTargetTypeValid; +- (FITWktStepTarget)getSecondaryTargetType; +- (void)setSecondaryTargetType:(FITWktStepTarget)secondaryTargetType; +// SecondaryTargetValue +- (BOOL)isSecondaryTargetValueValid; +- (FITUInt32)getSecondaryTargetValue; +- (void)setSecondaryTargetValue:(FITUInt32)secondaryTargetValue; +// SecondaryTargetValue Sub Fields +- (BOOL)isSecondaryTargetSpeedZoneValid; +- (FITUInt32) getSecondaryTargetSpeedZone; +- (void)setSecondaryTargetSpeedZone:(FITUInt32)secondaryTargetSpeedZone; +- (BOOL)isSecondaryTargetHrZoneValid; +- (FITUInt32) getSecondaryTargetHrZone; +- (void)setSecondaryTargetHrZone:(FITUInt32)secondaryTargetHrZone; +- (BOOL)isSecondaryTargetCadenceZoneValid; +- (FITUInt32) getSecondaryTargetCadenceZone; +- (void)setSecondaryTargetCadenceZone:(FITUInt32)secondaryTargetCadenceZone; +- (BOOL)isSecondaryTargetPowerZoneValid; +- (FITUInt32) getSecondaryTargetPowerZone; +- (void)setSecondaryTargetPowerZone:(FITUInt32)secondaryTargetPowerZone; +- (BOOL)isSecondaryTargetStrokeTypeValid; +- (FITSwimStroke) getSecondaryTargetStrokeType; +- (void)setSecondaryTargetStrokeType:(FITSwimStroke)secondaryTargetStrokeType; +// SecondaryCustomTargetValueLow +- (BOOL)isSecondaryCustomTargetValueLowValid; +- (FITUInt32)getSecondaryCustomTargetValueLow; +- (void)setSecondaryCustomTargetValueLow:(FITUInt32)secondaryCustomTargetValueLow; +// SecondaryCustomTargetValueLow Sub Fields +- (BOOL)isSecondaryCustomTargetSpeedLowValid; +- (FITFloat32) getSecondaryCustomTargetSpeedLow; +- (void)setSecondaryCustomTargetSpeedLow:(FITFloat32)secondaryCustomTargetSpeedLow; +- (BOOL)isSecondaryCustomTargetHeartRateLowValid; +- (FITWorkoutHr) getSecondaryCustomTargetHeartRateLow; +- (void)setSecondaryCustomTargetHeartRateLow:(FITWorkoutHr)secondaryCustomTargetHeartRateLow; +- (BOOL)isSecondaryCustomTargetCadenceLowValid; +- (FITUInt32) getSecondaryCustomTargetCadenceLow; +- (void)setSecondaryCustomTargetCadenceLow:(FITUInt32)secondaryCustomTargetCadenceLow; +- (BOOL)isSecondaryCustomTargetPowerLowValid; +- (FITWorkoutPower) getSecondaryCustomTargetPowerLow; +- (void)setSecondaryCustomTargetPowerLow:(FITWorkoutPower)secondaryCustomTargetPowerLow; +// SecondaryCustomTargetValueHigh +- (BOOL)isSecondaryCustomTargetValueHighValid; +- (FITUInt32)getSecondaryCustomTargetValueHigh; +- (void)setSecondaryCustomTargetValueHigh:(FITUInt32)secondaryCustomTargetValueHigh; +// SecondaryCustomTargetValueHigh Sub Fields +- (BOOL)isSecondaryCustomTargetSpeedHighValid; +- (FITFloat32) getSecondaryCustomTargetSpeedHigh; +- (void)setSecondaryCustomTargetSpeedHigh:(FITFloat32)secondaryCustomTargetSpeedHigh; +- (BOOL)isSecondaryCustomTargetHeartRateHighValid; +- (FITWorkoutHr) getSecondaryCustomTargetHeartRateHigh; +- (void)setSecondaryCustomTargetHeartRateHigh:(FITWorkoutHr)secondaryCustomTargetHeartRateHigh; +- (BOOL)isSecondaryCustomTargetCadenceHighValid; +- (FITUInt32) getSecondaryCustomTargetCadenceHigh; +- (void)setSecondaryCustomTargetCadenceHigh:(FITUInt32)secondaryCustomTargetCadenceHigh; +- (BOOL)isSecondaryCustomTargetPowerHighValid; +- (FITWorkoutPower) getSecondaryCustomTargetPowerHigh; +- (void)setSecondaryCustomTargetPowerHigh:(FITWorkoutPower)secondaryCustomTargetPowerHigh; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/ObjcFIT/include/FITZonesTargetMesg.h b/Sources/ObjcFIT/include/FITZonesTargetMesg.h new file mode 100644 index 0000000..dbba801 --- /dev/null +++ b/Sources/ObjcFIT/include/FITZonesTargetMesg.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#import + +#import "FITMessage.h" +#import "FITTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FITZonesTargetMesg : FITMessage +- (id)init; +// MaxHeartRate +- (BOOL)isMaxHeartRateValid; +- (FITUInt8)getMaxHeartRate; +- (void)setMaxHeartRate:(FITUInt8)maxHeartRate; +// ThresholdHeartRate +- (BOOL)isThresholdHeartRateValid; +- (FITUInt8)getThresholdHeartRate; +- (void)setThresholdHeartRate:(FITUInt8)thresholdHeartRate; +// FunctionalThresholdPower +- (BOOL)isFunctionalThresholdPowerValid; +- (FITUInt16)getFunctionalThresholdPower; +- (void)setFunctionalThresholdPower:(FITUInt16)functionalThresholdPower; +// HrCalcType +- (BOOL)isHrCalcTypeValid; +- (FITHrZoneCalc)getHrCalcType; +- (void)setHrCalcType:(FITHrZoneCalc)hrCalcType; +// PwrCalcType +- (BOOL)isPwrCalcTypeValid; +- (FITPwrZoneCalc)getPwrCalcType; +- (void)setPwrCalcType:(FITPwrZoneCalc)pwrCalcType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/SwiftFIT/FITListener.swift b/Sources/SwiftFIT/FITListener.swift new file mode 100644 index 0000000..082fdb9 --- /dev/null +++ b/Sources/SwiftFIT/FITListener.swift @@ -0,0 +1,298 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +import Foundation +import ObjcFIT + +public class FITListener: NSObject, FITMesgDelegate { + private let fitMessages = FITMessages(); + + public var messages: FITMessages { + get { + return fitMessages + } + } + + public func onMesg(_ mesg: FITMessage) { + switch mesg.getNum() { + case FITMesgNumFileId: + fitMessages.fileIdMesgs.append(FITFileIdMesg(message: mesg)); + break; + case FITMesgNumFileCreator: + fitMessages.fileCreatorMesgs.append(FITFileCreatorMesg(message: mesg)); + break; + case FITMesgNumTimestampCorrelation: + fitMessages.timestampCorrelationMesgs.append(FITTimestampCorrelationMesg(message: mesg)); + break; + case FITMesgNumSoftware: + fitMessages.softwareMesgs.append(FITSoftwareMesg(message: mesg)); + break; + case FITMesgNumSlaveDevice: + fitMessages.slaveDeviceMesgs.append(FITSlaveDeviceMesg(message: mesg)); + break; + case FITMesgNumCapabilities: + fitMessages.capabilitiesMesgs.append(FITCapabilitiesMesg(message: mesg)); + break; + case FITMesgNumFileCapabilities: + fitMessages.fileCapabilitiesMesgs.append(FITFileCapabilitiesMesg(message: mesg)); + break; + case FITMesgNumMesgCapabilities: + fitMessages.mesgCapabilitiesMesgs.append(FITMesgCapabilitiesMesg(message: mesg)); + break; + case FITMesgNumFieldCapabilities: + fitMessages.fieldCapabilitiesMesgs.append(FITFieldCapabilitiesMesg(message: mesg)); + break; + case FITMesgNumDeviceSettings: + fitMessages.deviceSettingsMesgs.append(FITDeviceSettingsMesg(message: mesg)); + break; + case FITMesgNumUserProfile: + fitMessages.userProfileMesgs.append(FITUserProfileMesg(message: mesg)); + break; + case FITMesgNumHrmProfile: + fitMessages.hrmProfileMesgs.append(FITHrmProfileMesg(message: mesg)); + break; + case FITMesgNumSdmProfile: + fitMessages.sdmProfileMesgs.append(FITSdmProfileMesg(message: mesg)); + break; + case FITMesgNumBikeProfile: + fitMessages.bikeProfileMesgs.append(FITBikeProfileMesg(message: mesg)); + break; + case FITMesgNumConnectivity: + fitMessages.connectivityMesgs.append(FITConnectivityMesg(message: mesg)); + break; + case FITMesgNumWatchfaceSettings: + fitMessages.watchfaceSettingsMesgs.append(FITWatchfaceSettingsMesg(message: mesg)); + break; + case FITMesgNumOhrSettings: + fitMessages.ohrSettingsMesgs.append(FITOhrSettingsMesg(message: mesg)); + break; + case FITMesgNumZonesTarget: + fitMessages.zonesTargetMesgs.append(FITZonesTargetMesg(message: mesg)); + break; + case FITMesgNumSport: + fitMessages.sportMesgs.append(FITSportMesg(message: mesg)); + break; + case FITMesgNumHrZone: + fitMessages.hrZoneMesgs.append(FITHrZoneMesg(message: mesg)); + break; + case FITMesgNumSpeedZone: + fitMessages.speedZoneMesgs.append(FITSpeedZoneMesg(message: mesg)); + break; + case FITMesgNumCadenceZone: + fitMessages.cadenceZoneMesgs.append(FITCadenceZoneMesg(message: mesg)); + break; + case FITMesgNumPowerZone: + fitMessages.powerZoneMesgs.append(FITPowerZoneMesg(message: mesg)); + break; + case FITMesgNumMetZone: + fitMessages.metZoneMesgs.append(FITMetZoneMesg(message: mesg)); + break; + case FITMesgNumDiveSettings: + fitMessages.diveSettingsMesgs.append(FITDiveSettingsMesg(message: mesg)); + break; + case FITMesgNumDiveAlarm: + fitMessages.diveAlarmMesgs.append(FITDiveAlarmMesg(message: mesg)); + break; + case FITMesgNumDiveGas: + fitMessages.diveGasMesgs.append(FITDiveGasMesg(message: mesg)); + break; + case FITMesgNumGoal: + fitMessages.goalMesgs.append(FITGoalMesg(message: mesg)); + break; + case FITMesgNumActivity: + fitMessages.activityMesgs.append(FITActivityMesg(message: mesg)); + break; + case FITMesgNumSession: + fitMessages.sessionMesgs.append(FITSessionMesg(message: mesg)); + break; + case FITMesgNumLap: + fitMessages.lapMesgs.append(FITLapMesg(message: mesg)); + break; + case FITMesgNumLength: + fitMessages.lengthMesgs.append(FITLengthMesg(message: mesg)); + break; + case FITMesgNumRecord: + fitMessages.recordMesgs.append(FITRecordMesg(message: mesg)); + break; + case FITMesgNumEvent: + fitMessages.eventMesgs.append(FITEventMesg(message: mesg)); + break; + case FITMesgNumDeviceInfo: + fitMessages.deviceInfoMesgs.append(FITDeviceInfoMesg(message: mesg)); + break; + case FITMesgNumDeviceAuxBatteryInfo: + fitMessages.deviceAuxBatteryInfoMesgs.append(FITDeviceAuxBatteryInfoMesg(message: mesg)); + break; + case FITMesgNumTrainingFile: + fitMessages.trainingFileMesgs.append(FITTrainingFileMesg(message: mesg)); + break; + case FITMesgNumWeatherConditions: + fitMessages.weatherConditionsMesgs.append(FITWeatherConditionsMesg(message: mesg)); + break; + case FITMesgNumWeatherAlert: + fitMessages.weatherAlertMesgs.append(FITWeatherAlertMesg(message: mesg)); + break; + case FITMesgNumGpsMetadata: + fitMessages.gpsMetadataMesgs.append(FITGpsMetadataMesg(message: mesg)); + break; + case FITMesgNumCameraEvent: + fitMessages.cameraEventMesgs.append(FITCameraEventMesg(message: mesg)); + break; + case FITMesgNumGyroscopeData: + fitMessages.gyroscopeDataMesgs.append(FITGyroscopeDataMesg(message: mesg)); + break; + case FITMesgNumAccelerometerData: + fitMessages.accelerometerDataMesgs.append(FITAccelerometerDataMesg(message: mesg)); + break; + case FITMesgNumMagnetometerData: + fitMessages.magnetometerDataMesgs.append(FITMagnetometerDataMesg(message: mesg)); + break; + case FITMesgNumBarometerData: + fitMessages.barometerDataMesgs.append(FITBarometerDataMesg(message: mesg)); + break; + case FITMesgNumThreeDSensorCalibration: + fitMessages.threeDSensorCalibrationMesgs.append(FITThreeDSensorCalibrationMesg(message: mesg)); + break; + case FITMesgNumOneDSensorCalibration: + fitMessages.oneDSensorCalibrationMesgs.append(FITOneDSensorCalibrationMesg(message: mesg)); + break; + case FITMesgNumVideoFrame: + fitMessages.videoFrameMesgs.append(FITVideoFrameMesg(message: mesg)); + break; + case FITMesgNumObdiiData: + fitMessages.obdiiDataMesgs.append(FITObdiiDataMesg(message: mesg)); + break; + case FITMesgNumNmeaSentence: + fitMessages.nmeaSentenceMesgs.append(FITNmeaSentenceMesg(message: mesg)); + break; + case FITMesgNumAviationAttitude: + fitMessages.aviationAttitudeMesgs.append(FITAviationAttitudeMesg(message: mesg)); + break; + case FITMesgNumVideo: + fitMessages.videoMesgs.append(FITVideoMesg(message: mesg)); + break; + case FITMesgNumVideoTitle: + fitMessages.videoTitleMesgs.append(FITVideoTitleMesg(message: mesg)); + break; + case FITMesgNumVideoDescription: + fitMessages.videoDescriptionMesgs.append(FITVideoDescriptionMesg(message: mesg)); + break; + case FITMesgNumVideoClip: + fitMessages.videoClipMesgs.append(FITVideoClipMesg(message: mesg)); + break; + case FITMesgNumSet: + fitMessages.setMesgs.append(FITSetMesg(message: mesg)); + break; + case FITMesgNumJump: + fitMessages.jumpMesgs.append(FITJumpMesg(message: mesg)); + break; + case FITMesgNumClimbPro: + fitMessages.climbProMesgs.append(FITClimbProMesg(message: mesg)); + break; + case FITMesgNumFieldDescription: + fitMessages.fieldDescriptionMesgs.append(FITFieldDescriptionMesg(message: mesg)); + break; + case FITMesgNumDeveloperDataId: + fitMessages.developerDataIdMesgs.append(FITDeveloperDataIdMesg(message: mesg)); + break; + case FITMesgNumCourse: + fitMessages.courseMesgs.append(FITCourseMesg(message: mesg)); + break; + case FITMesgNumCoursePoint: + fitMessages.coursePointMesgs.append(FITCoursePointMesg(message: mesg)); + break; + case FITMesgNumSegmentId: + fitMessages.segmentIdMesgs.append(FITSegmentIdMesg(message: mesg)); + break; + case FITMesgNumSegmentLeaderboardEntry: + fitMessages.segmentLeaderboardEntryMesgs.append(FITSegmentLeaderboardEntryMesg(message: mesg)); + break; + case FITMesgNumSegmentPoint: + fitMessages.segmentPointMesgs.append(FITSegmentPointMesg(message: mesg)); + break; + case FITMesgNumSegmentLap: + fitMessages.segmentLapMesgs.append(FITSegmentLapMesg(message: mesg)); + break; + case FITMesgNumSegmentFile: + fitMessages.segmentFileMesgs.append(FITSegmentFileMesg(message: mesg)); + break; + case FITMesgNumWorkout: + fitMessages.workoutMesgs.append(FITWorkoutMesg(message: mesg)); + break; + case FITMesgNumWorkoutSession: + fitMessages.workoutSessionMesgs.append(FITWorkoutSessionMesg(message: mesg)); + break; + case FITMesgNumWorkoutStep: + fitMessages.workoutStepMesgs.append(FITWorkoutStepMesg(message: mesg)); + break; + case FITMesgNumExerciseTitle: + fitMessages.exerciseTitleMesgs.append(FITExerciseTitleMesg(message: mesg)); + break; + case FITMesgNumSchedule: + fitMessages.scheduleMesgs.append(FITScheduleMesg(message: mesg)); + break; + case FITMesgNumTotals: + fitMessages.totalsMesgs.append(FITTotalsMesg(message: mesg)); + break; + case FITMesgNumWeightScale: + fitMessages.weightScaleMesgs.append(FITWeightScaleMesg(message: mesg)); + break; + case FITMesgNumBloodPressure: + fitMessages.bloodPressureMesgs.append(FITBloodPressureMesg(message: mesg)); + break; + case FITMesgNumMonitoringInfo: + fitMessages.monitoringInfoMesgs.append(FITMonitoringInfoMesg(message: mesg)); + break; + case FITMesgNumMonitoring: + fitMessages.monitoringMesgs.append(FITMonitoringMesg(message: mesg)); + break; + case FITMesgNumHr: + fitMessages.hrMesgs.append(FITHrMesg(message: mesg)); + break; + case FITMesgNumStressLevel: + fitMessages.stressLevelMesgs.append(FITStressLevelMesg(message: mesg)); + break; + case FITMesgNumMemoGlob: + fitMessages.memoGlobMesgs.append(FITMemoGlobMesg(message: mesg)); + break; + case FITMesgNumAntChannelId: + fitMessages.antChannelIdMesgs.append(FITAntChannelIdMesg(message: mesg)); + break; + case FITMesgNumAntRx: + fitMessages.antRxMesgs.append(FITAntRxMesg(message: mesg)); + break; + case FITMesgNumAntTx: + fitMessages.antTxMesgs.append(FITAntTxMesg(message: mesg)); + break; + case FITMesgNumExdScreenConfiguration: + fitMessages.exdScreenConfigurationMesgs.append(FITExdScreenConfigurationMesg(message: mesg)); + break; + case FITMesgNumExdDataFieldConfiguration: + fitMessages.exdDataFieldConfigurationMesgs.append(FITExdDataFieldConfigurationMesg(message: mesg)); + break; + case FITMesgNumExdDataConceptConfiguration: + fitMessages.exdDataConceptConfigurationMesgs.append(FITExdDataConceptConfigurationMesg(message: mesg)); + break; + case FITMesgNumDiveSummary: + fitMessages.diveSummaryMesgs.append(FITDiveSummaryMesg(message: mesg)); + break; + case FITMesgNumHrv: + fitMessages.hrvMesgs.append(FITHrvMesg(message: mesg)); + break; + case FITMesgNumPad: + fitMessages.padMesgs.append(FITPadMesg(message: mesg)); + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/Sources/SwiftFIT/FITMessages.swift b/Sources/SwiftFIT/FITMessages.swift new file mode 100644 index 0000000..83256ee --- /dev/null +++ b/Sources/SwiftFIT/FITMessages.swift @@ -0,0 +1,375 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +import Foundation +import ObjcFIT + +public class FITMessages { + + internal var fileIdMesgs = [FITFileIdMesg]() + internal var fileCreatorMesgs = [FITFileCreatorMesg]() + internal var timestampCorrelationMesgs = [FITTimestampCorrelationMesg]() + internal var softwareMesgs = [FITSoftwareMesg]() + internal var slaveDeviceMesgs = [FITSlaveDeviceMesg]() + internal var capabilitiesMesgs = [FITCapabilitiesMesg]() + internal var fileCapabilitiesMesgs = [FITFileCapabilitiesMesg]() + internal var mesgCapabilitiesMesgs = [FITMesgCapabilitiesMesg]() + internal var fieldCapabilitiesMesgs = [FITFieldCapabilitiesMesg]() + internal var deviceSettingsMesgs = [FITDeviceSettingsMesg]() + internal var userProfileMesgs = [FITUserProfileMesg]() + internal var hrmProfileMesgs = [FITHrmProfileMesg]() + internal var sdmProfileMesgs = [FITSdmProfileMesg]() + internal var bikeProfileMesgs = [FITBikeProfileMesg]() + internal var connectivityMesgs = [FITConnectivityMesg]() + internal var watchfaceSettingsMesgs = [FITWatchfaceSettingsMesg]() + internal var ohrSettingsMesgs = [FITOhrSettingsMesg]() + internal var zonesTargetMesgs = [FITZonesTargetMesg]() + internal var sportMesgs = [FITSportMesg]() + internal var hrZoneMesgs = [FITHrZoneMesg]() + internal var speedZoneMesgs = [FITSpeedZoneMesg]() + internal var cadenceZoneMesgs = [FITCadenceZoneMesg]() + internal var powerZoneMesgs = [FITPowerZoneMesg]() + internal var metZoneMesgs = [FITMetZoneMesg]() + internal var diveSettingsMesgs = [FITDiveSettingsMesg]() + internal var diveAlarmMesgs = [FITDiveAlarmMesg]() + internal var diveGasMesgs = [FITDiveGasMesg]() + internal var goalMesgs = [FITGoalMesg]() + internal var activityMesgs = [FITActivityMesg]() + internal var sessionMesgs = [FITSessionMesg]() + internal var lapMesgs = [FITLapMesg]() + internal var lengthMesgs = [FITLengthMesg]() + internal var recordMesgs = [FITRecordMesg]() + internal var eventMesgs = [FITEventMesg]() + internal var deviceInfoMesgs = [FITDeviceInfoMesg]() + internal var deviceAuxBatteryInfoMesgs = [FITDeviceAuxBatteryInfoMesg]() + internal var trainingFileMesgs = [FITTrainingFileMesg]() + internal var weatherConditionsMesgs = [FITWeatherConditionsMesg]() + internal var weatherAlertMesgs = [FITWeatherAlertMesg]() + internal var gpsMetadataMesgs = [FITGpsMetadataMesg]() + internal var cameraEventMesgs = [FITCameraEventMesg]() + internal var gyroscopeDataMesgs = [FITGyroscopeDataMesg]() + internal var accelerometerDataMesgs = [FITAccelerometerDataMesg]() + internal var magnetometerDataMesgs = [FITMagnetometerDataMesg]() + internal var barometerDataMesgs = [FITBarometerDataMesg]() + internal var threeDSensorCalibrationMesgs = [FITThreeDSensorCalibrationMesg]() + internal var oneDSensorCalibrationMesgs = [FITOneDSensorCalibrationMesg]() + internal var videoFrameMesgs = [FITVideoFrameMesg]() + internal var obdiiDataMesgs = [FITObdiiDataMesg]() + internal var nmeaSentenceMesgs = [FITNmeaSentenceMesg]() + internal var aviationAttitudeMesgs = [FITAviationAttitudeMesg]() + internal var videoMesgs = [FITVideoMesg]() + internal var videoTitleMesgs = [FITVideoTitleMesg]() + internal var videoDescriptionMesgs = [FITVideoDescriptionMesg]() + internal var videoClipMesgs = [FITVideoClipMesg]() + internal var setMesgs = [FITSetMesg]() + internal var jumpMesgs = [FITJumpMesg]() + internal var climbProMesgs = [FITClimbProMesg]() + internal var fieldDescriptionMesgs = [FITFieldDescriptionMesg]() + internal var developerDataIdMesgs = [FITDeveloperDataIdMesg]() + internal var courseMesgs = [FITCourseMesg]() + internal var coursePointMesgs = [FITCoursePointMesg]() + internal var segmentIdMesgs = [FITSegmentIdMesg]() + internal var segmentLeaderboardEntryMesgs = [FITSegmentLeaderboardEntryMesg]() + internal var segmentPointMesgs = [FITSegmentPointMesg]() + internal var segmentLapMesgs = [FITSegmentLapMesg]() + internal var segmentFileMesgs = [FITSegmentFileMesg]() + internal var workoutMesgs = [FITWorkoutMesg]() + internal var workoutSessionMesgs = [FITWorkoutSessionMesg]() + internal var workoutStepMesgs = [FITWorkoutStepMesg]() + internal var exerciseTitleMesgs = [FITExerciseTitleMesg]() + internal var scheduleMesgs = [FITScheduleMesg]() + internal var totalsMesgs = [FITTotalsMesg]() + internal var weightScaleMesgs = [FITWeightScaleMesg]() + internal var bloodPressureMesgs = [FITBloodPressureMesg]() + internal var monitoringInfoMesgs = [FITMonitoringInfoMesg]() + internal var monitoringMesgs = [FITMonitoringMesg]() + internal var hrMesgs = [FITHrMesg]() + internal var stressLevelMesgs = [FITStressLevelMesg]() + internal var memoGlobMesgs = [FITMemoGlobMesg]() + internal var antChannelIdMesgs = [FITAntChannelIdMesg]() + internal var antRxMesgs = [FITAntRxMesg]() + internal var antTxMesgs = [FITAntTxMesg]() + internal var exdScreenConfigurationMesgs = [FITExdScreenConfigurationMesg]() + internal var exdDataFieldConfigurationMesgs = [FITExdDataFieldConfigurationMesg]() + internal var exdDataConceptConfigurationMesgs = [FITExdDataConceptConfigurationMesg]() + internal var diveSummaryMesgs = [FITDiveSummaryMesg]() + internal var hrvMesgs = [FITHrvMesg]() + internal var padMesgs = [FITPadMesg]() + + public func getFileIdMesgs() -> [FITFileIdMesg] { + return fileIdMesgs; + } + public func getFileCreatorMesgs() -> [FITFileCreatorMesg] { + return fileCreatorMesgs; + } + public func getTimestampCorrelationMesgs() -> [FITTimestampCorrelationMesg] { + return timestampCorrelationMesgs; + } + public func getSoftwareMesgs() -> [FITSoftwareMesg] { + return softwareMesgs; + } + public func getSlaveDeviceMesgs() -> [FITSlaveDeviceMesg] { + return slaveDeviceMesgs; + } + public func getCapabilitiesMesgs() -> [FITCapabilitiesMesg] { + return capabilitiesMesgs; + } + public func getFileCapabilitiesMesgs() -> [FITFileCapabilitiesMesg] { + return fileCapabilitiesMesgs; + } + public func getMesgCapabilitiesMesgs() -> [FITMesgCapabilitiesMesg] { + return mesgCapabilitiesMesgs; + } + public func getFieldCapabilitiesMesgs() -> [FITFieldCapabilitiesMesg] { + return fieldCapabilitiesMesgs; + } + public func getDeviceSettingsMesgs() -> [FITDeviceSettingsMesg] { + return deviceSettingsMesgs; + } + public func getUserProfileMesgs() -> [FITUserProfileMesg] { + return userProfileMesgs; + } + public func getHrmProfileMesgs() -> [FITHrmProfileMesg] { + return hrmProfileMesgs; + } + public func getSdmProfileMesgs() -> [FITSdmProfileMesg] { + return sdmProfileMesgs; + } + public func getBikeProfileMesgs() -> [FITBikeProfileMesg] { + return bikeProfileMesgs; + } + public func getConnectivityMesgs() -> [FITConnectivityMesg] { + return connectivityMesgs; + } + public func getWatchfaceSettingsMesgs() -> [FITWatchfaceSettingsMesg] { + return watchfaceSettingsMesgs; + } + public func getOhrSettingsMesgs() -> [FITOhrSettingsMesg] { + return ohrSettingsMesgs; + } + public func getZonesTargetMesgs() -> [FITZonesTargetMesg] { + return zonesTargetMesgs; + } + public func getSportMesgs() -> [FITSportMesg] { + return sportMesgs; + } + public func getHrZoneMesgs() -> [FITHrZoneMesg] { + return hrZoneMesgs; + } + public func getSpeedZoneMesgs() -> [FITSpeedZoneMesg] { + return speedZoneMesgs; + } + public func getCadenceZoneMesgs() -> [FITCadenceZoneMesg] { + return cadenceZoneMesgs; + } + public func getPowerZoneMesgs() -> [FITPowerZoneMesg] { + return powerZoneMesgs; + } + public func getMetZoneMesgs() -> [FITMetZoneMesg] { + return metZoneMesgs; + } + public func getDiveSettingsMesgs() -> [FITDiveSettingsMesg] { + return diveSettingsMesgs; + } + public func getDiveAlarmMesgs() -> [FITDiveAlarmMesg] { + return diveAlarmMesgs; + } + public func getDiveGasMesgs() -> [FITDiveGasMesg] { + return diveGasMesgs; + } + public func getGoalMesgs() -> [FITGoalMesg] { + return goalMesgs; + } + public func getActivityMesgs() -> [FITActivityMesg] { + return activityMesgs; + } + public func getSessionMesgs() -> [FITSessionMesg] { + return sessionMesgs; + } + public func getLapMesgs() -> [FITLapMesg] { + return lapMesgs; + } + public func getLengthMesgs() -> [FITLengthMesg] { + return lengthMesgs; + } + public func getRecordMesgs() -> [FITRecordMesg] { + return recordMesgs; + } + public func getEventMesgs() -> [FITEventMesg] { + return eventMesgs; + } + public func getDeviceInfoMesgs() -> [FITDeviceInfoMesg] { + return deviceInfoMesgs; + } + public func getDeviceAuxBatteryInfoMesgs() -> [FITDeviceAuxBatteryInfoMesg] { + return deviceAuxBatteryInfoMesgs; + } + public func getTrainingFileMesgs() -> [FITTrainingFileMesg] { + return trainingFileMesgs; + } + public func getWeatherConditionsMesgs() -> [FITWeatherConditionsMesg] { + return weatherConditionsMesgs; + } + public func getWeatherAlertMesgs() -> [FITWeatherAlertMesg] { + return weatherAlertMesgs; + } + public func getGpsMetadataMesgs() -> [FITGpsMetadataMesg] { + return gpsMetadataMesgs; + } + public func getCameraEventMesgs() -> [FITCameraEventMesg] { + return cameraEventMesgs; + } + public func getGyroscopeDataMesgs() -> [FITGyroscopeDataMesg] { + return gyroscopeDataMesgs; + } + public func getAccelerometerDataMesgs() -> [FITAccelerometerDataMesg] { + return accelerometerDataMesgs; + } + public func getMagnetometerDataMesgs() -> [FITMagnetometerDataMesg] { + return magnetometerDataMesgs; + } + public func getBarometerDataMesgs() -> [FITBarometerDataMesg] { + return barometerDataMesgs; + } + public func getThreeDSensorCalibrationMesgs() -> [FITThreeDSensorCalibrationMesg] { + return threeDSensorCalibrationMesgs; + } + public func getOneDSensorCalibrationMesgs() -> [FITOneDSensorCalibrationMesg] { + return oneDSensorCalibrationMesgs; + } + public func getVideoFrameMesgs() -> [FITVideoFrameMesg] { + return videoFrameMesgs; + } + public func getObdiiDataMesgs() -> [FITObdiiDataMesg] { + return obdiiDataMesgs; + } + public func getNmeaSentenceMesgs() -> [FITNmeaSentenceMesg] { + return nmeaSentenceMesgs; + } + public func getAviationAttitudeMesgs() -> [FITAviationAttitudeMesg] { + return aviationAttitudeMesgs; + } + public func getVideoMesgs() -> [FITVideoMesg] { + return videoMesgs; + } + public func getVideoTitleMesgs() -> [FITVideoTitleMesg] { + return videoTitleMesgs; + } + public func getVideoDescriptionMesgs() -> [FITVideoDescriptionMesg] { + return videoDescriptionMesgs; + } + public func getVideoClipMesgs() -> [FITVideoClipMesg] { + return videoClipMesgs; + } + public func getSetMesgs() -> [FITSetMesg] { + return setMesgs; + } + public func getJumpMesgs() -> [FITJumpMesg] { + return jumpMesgs; + } + public func getClimbProMesgs() -> [FITClimbProMesg] { + return climbProMesgs; + } + public func getFieldDescriptionMesgs() -> [FITFieldDescriptionMesg] { + return fieldDescriptionMesgs; + } + public func getDeveloperDataIdMesgs() -> [FITDeveloperDataIdMesg] { + return developerDataIdMesgs; + } + public func getCourseMesgs() -> [FITCourseMesg] { + return courseMesgs; + } + public func getCoursePointMesgs() -> [FITCoursePointMesg] { + return coursePointMesgs; + } + public func getSegmentIdMesgs() -> [FITSegmentIdMesg] { + return segmentIdMesgs; + } + public func getSegmentLeaderboardEntryMesgs() -> [FITSegmentLeaderboardEntryMesg] { + return segmentLeaderboardEntryMesgs; + } + public func getSegmentPointMesgs() -> [FITSegmentPointMesg] { + return segmentPointMesgs; + } + public func getSegmentLapMesgs() -> [FITSegmentLapMesg] { + return segmentLapMesgs; + } + public func getSegmentFileMesgs() -> [FITSegmentFileMesg] { + return segmentFileMesgs; + } + public func getWorkoutMesgs() -> [FITWorkoutMesg] { + return workoutMesgs; + } + public func getWorkoutSessionMesgs() -> [FITWorkoutSessionMesg] { + return workoutSessionMesgs; + } + public func getWorkoutStepMesgs() -> [FITWorkoutStepMesg] { + return workoutStepMesgs; + } + public func getExerciseTitleMesgs() -> [FITExerciseTitleMesg] { + return exerciseTitleMesgs; + } + public func getScheduleMesgs() -> [FITScheduleMesg] { + return scheduleMesgs; + } + public func getTotalsMesgs() -> [FITTotalsMesg] { + return totalsMesgs; + } + public func getWeightScaleMesgs() -> [FITWeightScaleMesg] { + return weightScaleMesgs; + } + public func getBloodPressureMesgs() -> [FITBloodPressureMesg] { + return bloodPressureMesgs; + } + public func getMonitoringInfoMesgs() -> [FITMonitoringInfoMesg] { + return monitoringInfoMesgs; + } + public func getMonitoringMesgs() -> [FITMonitoringMesg] { + return monitoringMesgs; + } + public func getHrMesgs() -> [FITHrMesg] { + return hrMesgs; + } + public func getStressLevelMesgs() -> [FITStressLevelMesg] { + return stressLevelMesgs; + } + public func getMemoGlobMesgs() -> [FITMemoGlobMesg] { + return memoGlobMesgs; + } + public func getAntChannelIdMesgs() -> [FITAntChannelIdMesg] { + return antChannelIdMesgs; + } + public func getAntRxMesgs() -> [FITAntRxMesg] { + return antRxMesgs; + } + public func getAntTxMesgs() -> [FITAntTxMesg] { + return antTxMesgs; + } + public func getExdScreenConfigurationMesgs() -> [FITExdScreenConfigurationMesg] { + return exdScreenConfigurationMesgs; + } + public func getExdDataFieldConfigurationMesgs() -> [FITExdDataFieldConfigurationMesg] { + return exdDataFieldConfigurationMesgs; + } + public func getExdDataConceptConfigurationMesgs() -> [FITExdDataConceptConfigurationMesg] { + return exdDataConceptConfigurationMesgs; + } + public func getDiveSummaryMesgs() -> [FITDiveSummaryMesg] { + return diveSummaryMesgs; + } + public func getHrvMesgs() -> [FITHrvMesg] { + return hrvMesgs; + } + public func getPadMesgs() -> [FITPadMesg] { + return padMesgs; + } +} diff --git a/Sources/cppfit/fit.cpp b/Sources/cppfit/fit.cpp new file mode 100644 index 0000000..59c004d --- /dev/null +++ b/Sources/cppfit/fit.cpp @@ -0,0 +1,146 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit.hpp" + +/////////////////////////////////////////////////////////////////////// +// Private Definitions +/////////////////////////////////////////////////////////////////////// + +namespace fit +{ + +/////////////////////////////////////////////////////////////////////// +// Public Constants +/////////////////////////////////////////////////////////////////////// + +const FIT_UINT8 baseTypeSizes[FIT_BASE_TYPES] = + { + sizeof(FIT_ENUM), + sizeof(FIT_SINT8), + sizeof(FIT_UINT8), + sizeof(FIT_SINT16), + sizeof(FIT_UINT16), + sizeof(FIT_SINT32), + sizeof(FIT_UINT32), + sizeof(FIT_STRING), + sizeof(FIT_FLOAT32), + sizeof(FIT_FLOAT64), + sizeof(FIT_UINT8Z), + sizeof(FIT_UINT16Z), + sizeof(FIT_UINT32Z), + sizeof(FIT_BYTE), + sizeof(FIT_SINT64), + sizeof(FIT_UINT64), + sizeof(FIT_UINT64Z), + }; + +union FIT_FLOAT + { + FIT_UINT8 uint8_value[8]; + FIT_FLOAT64 float64_value; + FIT_FLOAT32 float32_value; + }; + +static const FIT_FLOAT floatInvalid = + { + { + 0xFF, + 0xFF, + 0xFF, + 0xFF, + 0xFF, + 0xFF, + 0xFF, + 0xFF + } + }; + +const FIT_ENUM enumInvalid = FIT_ENUM_INVALID; +const FIT_SINT8 sint8Invalid = FIT_SINT8_INVALID; +const FIT_UINT8 uint8Invalid = FIT_UINT8_INVALID; +const FIT_SINT16 sint16Invalid = FIT_SINT16_INVALID; +const FIT_UINT16 uint16Invalid = FIT_UINT16_INVALID; +const FIT_SINT32 sint32Invalid = FIT_SINT32_INVALID; +const FIT_UINT32 uint32Invalid = FIT_UINT32_INVALID; +const FIT_STRING stringInvalid = FIT_STRING_INVALID; +const FIT_UINT8Z uint8zInvalid = FIT_UINT8Z_INVALID; +const FIT_UINT16Z uint16zInvalid = FIT_UINT16Z_INVALID; +const FIT_UINT32Z uint32zInvalid = FIT_UINT32Z_INVALID; +const FIT_BYTE byteInvalid = FIT_BYTE_INVALID; +const FIT_SINT64 sint64Invalid = FIT_SINT64_INVALID; +const FIT_UINT64 uint64Invalid = FIT_UINT64_INVALID; +const FIT_UINT64Z uint64zInvalid = FIT_UINT64Z_INVALID; + +const FIT_UINT8 *baseTypeInvalids[FIT_BASE_TYPES] = + { + (FIT_UINT8 *)&enumInvalid, + (FIT_UINT8 *)&sint8Invalid, + (FIT_UINT8 *)&uint8Invalid, + (FIT_UINT8 *)&sint16Invalid, + (FIT_UINT8 *)&uint16Invalid, + (FIT_UINT8 *)&sint32Invalid, + (FIT_UINT8 *)&uint32Invalid, + (FIT_UINT8 *)&stringInvalid, + (FIT_UINT8 *)&floatInvalid.float32_value, + (FIT_UINT8 *)&floatInvalid.float64_value, + (FIT_UINT8 *)&uint8zInvalid, + (FIT_UINT8 *)&uint16zInvalid, + (FIT_UINT8 *)&uint32zInvalid, + (FIT_UINT8 *)&byteInvalid, + (FIT_UINT8 *)&sint64Invalid, + (FIT_UINT8 *)&uint64Invalid, + (FIT_UINT8 *)&uint64zInvalid, + }; + +const std::map versionMap +{ + { ProtocolVersion::V10, DetailedProtocolVersion( 1, 0 ) }, + { ProtocolVersion::V20, DetailedProtocolVersion( 2, 0 ) } +}; + +/////////////////////////////////////////////////////////////////////// +// Public Functions +/////////////////////////////////////////////////////////////////////// + +DetailedProtocolVersion::DetailedProtocolVersion(FIT_UINT8 major, FIT_UINT8 minor) +{ + version = ( major << FIT_PROTOCOL_VERSION_MAJOR_SHIFT ) | minor; +} + +FIT_UINT8 DetailedProtocolVersion::GetMajorVersion() const +{ + return ( version & FIT_PROTOCOL_VERSION_MAJOR_MASK ) >> FIT_PROTOCOL_VERSION_MAJOR_SHIFT; +} + +FIT_UINT8 DetailedProtocolVersion::GetMinorVersion() const +{ + return version & FIT_PROTOCOL_VERSION_MINOR_MASK; +} + +FIT_UINT8 DetailedProtocolVersion::GetVersionByte() const +{ + return version; +} + +FIT_UINT8 GetArch(void) +{ + const FIT_UINT16 arch = 0x0100; + return (*(FIT_UINT8 *)&arch); +} + +} // namespace fit + +#if defined(FIT_CPP_INCLUDE_C) + // Include C Implementation + #include "fit.c" +#endif diff --git a/Sources/cppfit/fit_accumulated_field.cpp b/Sources/cppfit/fit_accumulated_field.cpp new file mode 100644 index 0000000..fde089b --- /dev/null +++ b/Sources/cppfit/fit_accumulated_field.cpp @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_accumulated_field.hpp" + +namespace fit +{ + +AccumulatedField::AccumulatedField() + : lastValue(0), accumulatedValue(0) +{ +} + +AccumulatedField::AccumulatedField(const FIT_UINT16 newMesgNum, const FIT_UINT8 destFieldNum) + : mesgNum(newMesgNum), destFieldNum(destFieldNum), lastValue(0), accumulatedValue(0) +{ +} + +FIT_UINT32 AccumulatedField::Accumulate(const FIT_UINT32 value, const FIT_UINT8 bits) +{ + FIT_UINT32 mask = ((FIT_UINT32) 1 << bits) - 1; + + accumulatedValue += (value - lastValue) & mask; + lastValue = value; + + return accumulatedValue; +} + +FIT_UINT32 AccumulatedField::Set(FIT_UINT32 value) +{ + accumulatedValue = value; + this->lastValue = value; + return accumulatedValue; +} + +} // namespace fit diff --git a/Sources/cppfit/fit_accumulator.cpp b/Sources/cppfit/fit_accumulator.cpp new file mode 100644 index 0000000..e30f3f7 --- /dev/null +++ b/Sources/cppfit/fit_accumulator.cpp @@ -0,0 +1,56 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_accumulator.hpp" + +namespace fit +{ + +FIT_UINT32 Accumulator::Accumulate(const FIT_UINT16 mesgNum, const FIT_UINT8 destFieldNum, const FIT_UINT32 value, const FIT_UINT8 bits) +{ + int i; + AccumulatedField accumField; + + for (i = 0; i < (int)fields.size(); i++) + { + accumField = fields.at(i); + if ( ( accumField.mesgNum == mesgNum ) && ( accumField.destFieldNum == destFieldNum ) ) + break; + } + + if (i == (int)fields.size()) { + fields.push_back(AccumulatedField(mesgNum, destFieldNum)); + } + + return fields[i].Accumulate(value, bits); +} + +void Accumulator::Set(const FIT_UINT16 mesgNum, const FIT_UINT8 destFieldNum, const FIT_UINT32 value) +{ + int i; + AccumulatedField accumField; + + for (i = 0; i < (int)fields.size(); i++) + { + accumField = fields.at(i); + if ( ( accumField.mesgNum == mesgNum ) && ( accumField.destFieldNum == destFieldNum ) ) + break; + } + + if (i == (int)fields.size()) { + accumField = AccumulatedField(mesgNum, destFieldNum); + fields.push_back(accumField); + } + fields[i].Set(value); +} + +} // namespace fit diff --git a/Sources/cppfit/fit_buffer_encode.cpp b/Sources/cppfit/fit_buffer_encode.cpp new file mode 100644 index 0000000..bea556e --- /dev/null +++ b/Sources/cppfit/fit_buffer_encode.cpp @@ -0,0 +1,114 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_buffer_encode.hpp" +#include "fit_crc.hpp" + +namespace fit +{ + +BufferEncode::BufferEncode(void) +{ + this->Open(); +} + +void BufferEncode::Open() +{ + stringWriter.str(std::string("")); + stringWriter.clear(); + dataSize = 0; + + for (FIT_UINT8 i = 0; i < FIT_MAX_LOCAL_MESGS; ++i) + { + lastMesgDefinition[i].SetNum(FIT_MESG_NUM_INVALID); + lastMesgDefinition[i].SetLocalNum(i); + lastMesgDefinition[i].ClearFields(); + } +} + +void BufferEncode::Write(const MesgDefinition& mesgDef) +{ + dataSize += mesgDef.Write(stringWriter); + lastMesgDefinition[mesgDef.GetLocalNum()] = mesgDef; +} + +void BufferEncode::Write(const Mesg& mesg) +{ + MesgDefinition mesgDefinition(mesg); + + if (!lastMesgDefinition[mesg.GetLocalNum()].Supports(mesgDefinition)) + Write(mesgDefinition); + + dataSize += mesg.Write(stringWriter, &(lastMesgDefinition[mesg.GetLocalNum()])); +} + +void BufferEncode::Write(const std::vector& mesgs) +{ + for (std::vector::size_type i = 0; i < mesgs.size(); i++) + Write(mesgs[i]); +} + +std::string BufferEncode::Close(void) +{ + FIT_FILE_HDR file_header; + + // Get the data. + std::string dataString = stringWriter.str(); + + // Write the header. + stringWriter.str(std::string("")); + stringWriter.clear(); + file_header.header_size = FIT_FILE_HDR_SIZE; + file_header.profile_version = FIT_PROFILE_VERSION; + file_header.protocol_version = FIT_PROTOCOL_VERSION; + memcpy((FIT_UINT8 *)&file_header.data_type, ".FIT", 4); + file_header.data_size = dataSize; + file_header.crc = CRC::Calc16(&file_header, FIT_STRUCT_OFFSET(crc, FIT_FILE_HDR)); + stringWriter.write((const char *)&file_header, FIT_FILE_HDR_SIZE); + + std::string headerString = stringWriter.str(); + + // Write the CRC. + stringWriter.str(std::string("")); + stringWriter.clear(); + + FIT_UINT16 crc = 0; + + for (std::string::size_type i = 0; i < headerString.size(); i++) + crc = CRC::Get16(crc, (int) headerString[i]); + + for (std::string::size_type i = 0; i < dataString.size(); i++) + crc = CRC::Get16(crc, (int) dataString[i]); + + stringWriter.put(crc & 0xFF); + stringWriter.put((char)(crc >> 8)); + + std::string crcString = stringWriter.str(); + + // Discard the output stream and re-initialize. + Open(); + + // Put the result together. + return (headerString + dataString + crcString); +} + +void BufferEncode::OnMesg(Mesg &mesg) +{ + Write(mesg); +} + +void BufferEncode::OnMesgDefinition(MesgDefinition& mesgDef) +{ + Write(mesgDef); +} + +} // namespace fit diff --git a/Sources/cppfit/fit_crc.cpp b/Sources/cppfit/fit_crc.cpp new file mode 100644 index 0000000..be0a82e --- /dev/null +++ b/Sources/cppfit/fit_crc.cpp @@ -0,0 +1,60 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_crc.hpp" + +namespace fit +{ + +FIT_UINT16 CRC::Get16(FIT_UINT16 crc, FIT_UINT8 byte) +{ + static const FIT_UINT16 crc_table[16] = + { + 0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, + 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400 + }; + FIT_UINT16 tmp; + + // compute checksum of lower four bits of byte + tmp = crc_table[crc & 0xF]; + crc = (crc >> 4) & 0x0FFF; + crc = crc ^ tmp ^ crc_table[byte & 0xF]; + + // now compute checksum of upper four bits of byte + tmp = crc_table[crc & 0xF]; + crc = (crc >> 4) & 0x0FFF; + crc = crc ^ tmp ^ crc_table[(byte >> 4) & 0xF]; + + return crc; +} + +FIT_UINT16 CRC::Calc16(const volatile void *data, FIT_UINT32 size) +{ + FIT_UINT16 crc = 0; + FIT_BYTE *data_ptr = (FIT_BYTE *)data; + + while (size) + { + crc = CRC::Get16(crc, *data_ptr); + data_ptr++; + size--; + } + + return crc; +} + +} // namespace fit + +#if defined(FIT_CPP_INCLUDE_C) + // Include C Implementation + #include "fit_crc.c" +#endif diff --git a/Sources/cppfit/fit_date_time.cpp b/Sources/cppfit/fit_date_time.cpp new file mode 100644 index 0000000..9dce341 --- /dev/null +++ b/Sources/cppfit/fit_date_time.cpp @@ -0,0 +1,124 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_date_time.hpp" + +namespace fit +{ + +DateTime::DateTime(time_t timeStamp) +{ + this->timeStamp = (FIT_DATE_TIME) (timeStamp - systemTimeOffset); + this->fractionalTimeStamp = 0.0; +} + +DateTime::DateTime(FIT_DATE_TIME timeStamp) +{ + this->timeStamp = timeStamp; + this->fractionalTimeStamp = 0.0; +} + +DateTime::DateTime(FIT_DATE_TIME timeStamp, FIT_FLOAT64 fractionalTimeStamp) +{ + this->timeStamp = timeStamp + (FIT_DATE_TIME) floor(fractionalTimeStamp); + this->fractionalTimeStamp = fractionalTimeStamp - (FIT_FLOAT64) floor(fractionalTimeStamp); +} + +DateTime::DateTime(const DateTime& dateTime) +{ + timeStamp = dateTime.timeStamp; + fractionalTimeStamp = dateTime.fractionalTimeStamp; +} + +bool DateTime::Equals(DateTime dateTime) +{ + return( ( ( this->timeStamp == dateTime.GetTimeStamp() ) && ( this->fractionalTimeStamp == dateTime.GetFractionalTimestamp() ) ) ); +} + +FIT_DATE_TIME DateTime::GetTimeStamp() +{ + return timeStamp; +} + +FIT_FLOAT64 DateTime::GetFractionalTimestamp() +{ + return fractionalTimeStamp; +} + +void DateTime::add(DateTime dateTime) +{ + this->timeStamp += dateTime.GetTimeStamp(); + this->fractionalTimeStamp += dateTime.GetFractionalTimestamp(); + + // Adjust fractional part to be less that 1 + this->timeStamp += (long)floor(this->fractionalTimeStamp); + this->fractionalTimeStamp -= (float)floor(this->fractionalTimeStamp); +} + +void DateTime::add(FIT_DATE_TIME timestamp) +{ + add(DateTime(timestamp)); +} + +void DateTime::add(double fractional_timestamp) +{ + add(DateTime(0, fractional_timestamp)); +} + +time_t DateTime::GetTimeT() +{ + double val; + if (fractionalTimeStamp >= 0.5) + val = ceil(fractionalTimeStamp); + else + val = 0; + return (time_t)(timeStamp + systemTimeOffset + val); +} + +void DateTime::ConvertSystemTimeToUTC(long offset) +{ + if (timeStamp < FIT_DATE_TIME_MIN) + { + timeStamp += offset; + } +} + +//Returns 0 if DateTimes are equal +//Returns -1 if t1 > target object (this) +//Returns 1 if target object (this) > t1 +//If timeStamps are equal, fractional timestamps are compared +int DateTime::CompareTo(DateTime t1) { + // fractional_timestamp is guaranteed to be less that 1 which allows simplified comparison below + if ( this->timeStamp == t1.GetTimeStamp() ) { + // Timestamps are equal; must compare fractional part. + if (this->fractionalTimeStamp < t1.GetFractionalTimestamp()) + { + return -1; + } + else if (this->fractionalTimeStamp > t1.GetFractionalTimestamp()) + { + return 1; + } + else + { + return 0; + } + } + else if ( this->timeStamp > t1.GetTimeStamp() ) { + return 1; + } + else { + return -1; + } +} + +} // namespace fit diff --git a/Sources/cppfit/fit_decode.cpp b/Sources/cppfit/fit_decode.cpp new file mode 100644 index 0000000..1af22c8 --- /dev/null +++ b/Sources/cppfit/fit_decode.cpp @@ -0,0 +1,1084 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + + +#include +#include +#include "fit_decode.hpp" +#include "fit_crc.hpp" +#include "fit_mesg_listener.hpp" +#include "fit_developer_data_id_mesg.hpp" +#include "fit_developer_field.hpp" + +#include "FITDecoder-Bridge.h" + +namespace fit +{ + +const FIT_UINT8 Decode::DevFieldNumOffset = 0; +const FIT_UINT8 Decode::DevFieldSizeOffset = 1; +const FIT_UINT8 Decode::DevFieldIndexOffset = 2; + +Decode::Decode() + : mesgListener(NULL) + , mesgDefinitionListener(NULL) +{ + for (int i=0; ifile = file; + currentByteOffset = 0; + descriptions.clear(); + developers.clear(); + + // Read out the size of the file + file->seekg(0, file->end); + fileSize = (FIT_UINT32)file->tellg(); + // Ensure the read starts at the beginning of the file + file->seekg(0, file->beg); + + while ( ( currentByteOffset < fileSize ) && ( status == FIT_TRUE ) ) + { + InitRead(*file, FIT_FALSE); + status = Resume(); + } + + return status; +} + +FIT_BOOL Decode::Read + ( + std::istream* file, + MesgListener* mesgListener, + MesgDefinitionListener* definitionListener, + DeveloperFieldDescriptionListener* descriptionListener + ) +{ + this->mesgListener = mesgListener; + this->mesgDefinitionListener = definitionListener; + this->descriptionListener = descriptionListener; + + return Read(file); +} + +FIT_BOOL Decode::Read(std::istream &file, MesgListener& mesgListener) +{ + return Read(&file, &mesgListener, nullptr, nullptr); +} + +FIT_BOOL Decode::Read(std::istream &file, MesgListener& mesgListener, MesgDefinitionListener& mesgDefinitionListener) +{ + return Read(&file, &mesgListener, &mesgDefinitionListener, nullptr); +} + +FIT_BOOL Decode::Read(std::istream* file, void* objcppCaller) +{ + this->objcppCaller = objcppCaller; + + return Read(file, nullptr, nullptr, nullptr); +} + +void Decode::Pause(void) +{ + pause = FIT_TRUE; +} + +FIT_BOOL Decode::Resume(void) +{ + pause = FIT_FALSE; + RETURN decodeReturn = RETURN_CONTINUE; + + do + { + if ( currentByteIndex == 0 ) + { + file->read(buffer, BufferSize); + bytesRead = (FIT_UINT32)file->gcount(); + } + + for (; currentByteIndex < bytesRead; currentByteIndex++) + { + if (pause) + return FIT_FALSE; + + decodeReturn = ReadByte((FIT_UINT8)buffer[currentByteIndex]); + + switch (decodeReturn) { + case RETURN_CONTINUE: + break; + + case RETURN_MESG: + if (mesg.GetNum() == FIT_MESG_NUM_DEVELOPER_DATA_ID) + { + DeveloperDataIdMesg devIdMesg(mesg); + FIT_UINT8 index = devIdMesg.GetDeveloperDataIndex(); + developers[index] = devIdMesg; + descriptions[index] = std::unordered_map(); + } + else if (mesg.GetNum() == FIT_MESG_NUM_FIELD_DESCRIPTION) + { + FieldDescriptionMesg descMesg(mesg); + FIT_UINT8 index = descMesg.GetDeveloperDataIndex(); + FIT_UINT8 fldNum = descMesg.GetFieldDefinitionNumber(); + + try + { + descriptions.at(index)[fldNum] = descMesg; + OnDeveloperFieldDefinitionFromDecoder(objcppCaller, &descMesg, &developers[index]); + + if (descriptionListener) + { + descriptionListener->OnDeveloperFieldDescription(DeveloperFieldDescription(descMesg, developers[index])); + } + } + catch (std::out_of_range) + { + // Description without a Developer Data Id Message + } + } + + OnMesgFromDecoder(objcppCaller,&mesg); + + if (mesgListener) + mesgListener->OnMesg(mesg); + break; + + case RETURN_MESG_DEF: + OnMesgDefinitionFromDecoder(objcppCaller, &localMesgDefs[localMesgIndex]); + if (mesgDefinitionListener) + { + mesgDefinitionListener->OnMesgDefinition(localMesgDefs[localMesgIndex]); + } + break; + + case RETURN_END_OF_FILE: + // Increment so we do not read the same byte twice in the case of a chained file + currentByteIndex++; + currentByteOffset++; + return FIT_TRUE; + + default: + currentByteOffset++; + return FIT_TRUE; + } + currentByteOffset++; + } + currentByteIndex = 0; + } while ( file->good() ); + + if ((streamIsComplete == FIT_TRUE) && (skipHeader == FIT_FALSE)) + { + // When decoding a complete file we should exit via RETURN_END_OF_FILE state only. + std::ostringstream message; + message << "FIT decode error: Unexpected end of input stream at byte: " << currentByteOffset; + throw RuntimeException(message.str()); + } + if (streamIsComplete == FIT_FALSE) + { + // If stream is not yet complete caller can resume() when there is more data + // or decide there was an error. + if ((decodeReturn == RETURN_MESG) || (decodeReturn == RETURN_MESG_DEF)) + { + // Our stream ended on a complete message, maybe we are done decoding. + return FIT_TRUE; + } + else + { + // EOF was encountered mid message. Caller may want to resume once + // more bytes are available. + return FIT_FALSE; + } + } + // if Decoding Records section only, file should end on a complete message + // (unless incomplete stream option above was also used) + else + { + if ((decodeReturn == RETURN_MESG) || (decodeReturn == RETURN_MESG_DEF)) + { + // Our stream ended on a complete message, we are done decoding. + return FIT_TRUE; + } + else + { + if (invalidDataSize == FIT_FALSE) + { + std::ostringstream message; + message << "FIT decode error: Unexpected end of input stream at byte: " << currentByteOffset; + throw RuntimeException(message.str()); + } + else + { + return FIT_TRUE; + } + } + } +} + +FIT_BOOL Decode::getInvalidDataSize(void) +{ + return invalidDataSize; +} + +void Decode::setInvalidDataSize(FIT_BOOL value) +{ + invalidDataSize = value; +} + +void Decode::InitRead(std::istream &file) +{ + InitRead(file, FIT_TRUE); +} + +void Decode::InitRead(std::istream &file, FIT_BOOL startOfFile) +{ + fileBytesLeft = 3; // Header byte + CRC. + fileHdrOffset = 0; + crc = 0; + headerException = ""; + // Only reset to header state if we do not want + // to skip the header. + if (skipHeader == FIT_FALSE) + state = STATE_FILE_HDR; + lastTimeOffset = 0; + + // Reset to the beginning of the file + if ( startOfFile == FIT_TRUE) + { + file.seekg(0, file.beg); + } + + file.clear(); // workaround libc++ issue +} + +void Decode::UpdateEndianness(FIT_UINT8 type, FIT_UINT8 size) +{ + FIT_UINT8 typeSize = baseTypeSizes[type & FIT_BASE_TYPE_NUM_MASK]; + FIT_UINT8 numElements = size / typeSize; + + if (((type & FIT_BASE_TYPE_ENDIAN_FLAG) != 0) && + ((archs[localMesgIndex] & FIT_ARCH_ENDIAN_MASK) != FIT_ARCH_ENDIAN_LITTLE)) + { + // Swap the bytes for each element. + for (int element = 0; element < numElements; element++) + { + for (int i = 0; i < (typeSize / 2); i++) + { + FIT_UINT8 tmp = fieldData[element * typeSize + i]; + fieldData[element * typeSize + i] = fieldData[element * typeSize + typeSize - i - 1]; + fieldData[element * typeSize + typeSize - i - 1] = tmp; + } + } + } +} + +Decode::RETURN Decode::ReadByte(FIT_UINT8 data) +{ + if ((fileBytesLeft > 0) && (skipHeader == FIT_FALSE)) + { + crc = CRC::Get16(crc, data); + + fileBytesLeft--; + + if (fileBytesLeft == 1) // CRC low byte. + { + if (state != STATE_RECORD) + { + std::ostringstream message; + message << "FIT decode error: Decoder not in correct state after last data byte in file. Check message definitions. Error at byte: " << currentByteOffset; + throw(RuntimeException(message.str())); + } + + return RETURN_CONTINUE; // Next byte. + } + + if (fileBytesLeft == 0) // CRC high byte. + { + if (crc != 0) + { + std::ostringstream message; + message << "FIT decode error: File CRC failed. Error at byte: " << currentByteOffset; + throw(RuntimeException(message.str())); + } + + return RETURN_END_OF_FILE; + } + } + + switch (state) { + case STATE_FILE_HDR: + switch (fileHdrOffset++) + { + case 0: + if( data < FIT_HEADER_SIZE_NO_CRC ) + { + std::ostringstream message; + message << "FIT decode error: File header size invalid. File is not FIT. Error at byte : " << currentByteOffset; + headerException = message.str(); + } + else + { + fileHdrSize = data; + fileBytesLeft = fileHdrSize + 2; + } + break; + case 1: + if ((data & FIT_PROTOCOL_VERSION_MAJOR_MASK) > (FIT_PROTOCOL_VERSION_MAJOR << FIT_PROTOCOL_VERSION_MAJOR_SHIFT)) + { + std::ostringstream message; + message << "FIT decode error: Protocol version " << (data & FIT_PROTOCOL_VERSION_MAJOR_MASK) << FIT_PROTOCOL_VERSION_MAJOR_SHIFT << "." << (data & FIT_PROTOCOL_VERSION_MINOR_MASK) << " not supported. Must be " << FIT_PROTOCOL_VERSION_MAJOR << ".15 or earlier."; + headerException = message.str(); + } + break; + case 4: + fileDataSize = data & 0xFF; + break; + case 5: + fileDataSize |= (FIT_UINT32) (data & 0xFF) << 8; + break; + case 6: + fileDataSize |= (FIT_UINT32) (data & 0xFF) << 16; + break; + case 7: + fileDataSize |= (FIT_UINT32) (data & 0xFF) << 24; + if ( (fileDataSize == 0) && (invalidDataSize == FIT_FALSE) ) + { + invalidDataSize = FIT_TRUE; + std::ostringstream message; + message << "FIT decode error: File Size is 0. Error at byte : " << currentByteOffset; + headerException = message.str(); + } + break; + case 8: + if (data != '.') + { + std::ostringstream message; + message << "FIT decode error: File header signature mismatch. File is not FIT. Error at byte : " << currentByteOffset; + headerException = message.str(); + } + break; + case 9: + if (data != 'F') + { + std::ostringstream message; + message << "FIT decode error: File header signature mismatch. File is not FIT. Error at byte : " << currentByteOffset; + headerException = message.str(); + } + break; + case 10: + if (data != 'I') + { + std::ostringstream message; + message << "FIT decode error: File header signature mismatch. File is not FIT. Error at byte : " << currentByteOffset; + headerException = message.str(); + } + break; + case 11: + if (data != 'T') + { + std::ostringstream message; + message << "FIT decode error: File header signature mismatch. File is not FIT. Error at byte : " << currentByteOffset; + headerException = message.str(); + } + + if (headerException != "") + { + throw(RuntimeException(headerException)); + } + break; + default: + break; + } + + if (fileHdrOffset == fileHdrSize) + { + fileBytesLeft = fileDataSize + 2; // include crc + state = STATE_RECORD; + + // We don't care about the CRC when the file size is invalid + if (invalidDataSize) + { + skipHeader = FIT_TRUE; + } + } + break; + + case STATE_RECORD: + fieldIndex = 0; + fieldBytesLeft = 0; + + if (fileBytesLeft > 1) { + if ((data & FIT_HDR_TIME_REC_BIT) != 0) { + Field timestampField = Field(Profile::MESG_RECORD, Profile::RECORD_MESG_TIMESTAMP); + FIT_UINT8 timeOffset = data & FIT_HDR_TIME_OFFSET_MASK; + + timestamp += (timeOffset - lastTimeOffset) & FIT_HDR_TIME_OFFSET_MASK; + lastTimeOffset = timeOffset; + timestampField.SetUINT32Value(timestamp); + + localMesgIndex = (data & FIT_HDR_TIME_TYPE_MASK) >> FIT_HDR_TIME_TYPE_SHIFT; + + if (localMesgDefs[localMesgIndex].GetNum() == FIT_MESG_NUM_INVALID) + { + std::ostringstream message; + message << "FIT decode error: Missing FIT message definition for local message number " << ((int)localMesgIndex) << ". Error at byte: " << currentByteOffset; + throw(RuntimeException(message.str())); + } + + mesg = Mesg(localMesgDefs[localMesgIndex].GetNum()); + mesg.SetLocalNum(localMesgIndex); + mesg.AddField(timestampField); + + if (localMesgDefs[localMesgIndex].GetFields().size() == 0) + return RETURN_MESG; + + state = STATE_FIELD_DATA; + } + else + { + localMesgIndex = data & FIT_HDR_TYPE_MASK; + + if ((data & FIT_HDR_TYPE_DEF_BIT) != 0) + { + hasDevData = ((data & FIT_HDR_DEV_FIELD_BIT) != 0); + state = STATE_RESERVED1; + } + else + { + if (localMesgDefs[localMesgIndex].GetNum() == FIT_MESG_NUM_INVALID) + { + std::ostringstream message; + message << "FIT decode error: Missing FIT message definition for local message number " << ((int)localMesgIndex) << ". Error at byte: " << currentByteOffset; + throw(RuntimeException(message.str())); + } + + mesg = Mesg(localMesgDefs[localMesgIndex].GetNum()); + mesg.SetLocalNum(localMesgIndex); + + if (localMesgDefs[localMesgIndex].GetFields().size() != 0) + { + state = STATE_FIELD_DATA; + } + else if (localMesgDefs[localMesgIndex].GetDevFields().size() != 0) + { + state = STATE_DEV_FIELD_DATA; + } + else + { + return RETURN_MESG; + } + } + } + } + else + { + // We just got the low byte of the crc. + state = STATE_FILE_CRC_HIGH; + } + break; + + case STATE_RESERVED1: + localMesgDefs[localMesgIndex].ClearFields(); + state = STATE_ARCH; + break; + + case STATE_ARCH: + archs[localMesgIndex] = data; + state = STATE_MESG_NUM_0; + break; + + case STATE_MESG_NUM_0: + // Read the global message number bytes in as if they are in little endian format. + localMesgDefs[localMesgIndex].SetNum((FIT_UINT16)data); + state = STATE_MESG_NUM_1; + break; + + case STATE_MESG_NUM_1: + localMesgDefs[localMesgIndex].SetNum(localMesgDefs[localMesgIndex].GetNum() | ((FIT_UINT16)data << 8)); + + // We have to check for endianness. + if (archs[localMesgIndex] == FIT_ARCH_ENDIAN_BIG) { + localMesgDefs[localMesgIndex].SetNum((localMesgDefs[localMesgIndex].GetNum() >> 8) | ((localMesgDefs[localMesgIndex].GetNum() & 0xFF) << 8)); + } + else if (archs[localMesgIndex] != FIT_ARCH_ENDIAN_LITTLE) + { + std::ostringstream message; + message << "FIT decode error: Architecture " << archs[localMesgIndex] << " not supported. Error at byte: " << currentByteOffset; + throw(RuntimeException(message.str())); + } + + state = STATE_NUM_FIELDS; + break; + + case STATE_NUM_FIELDS: + numFields = data; + fieldIndex = 0; + + if (numFields == 0) + { + if (hasDevData) + { + state = STATE_NUM_DEV_FIELDS; + } + else + { + state = STATE_RECORD; + return RETURN_MESG_DEF; + } + } + else + { + state = STATE_FIELD_NUM; + } + break; + + case STATE_FIELD_NUM: + localMesgDefs[localMesgIndex].AddField(FieldDefinition()); + localMesgDefs[localMesgIndex].GetFieldByIndex(fieldIndex)->SetNum(data); + state = STATE_FIELD_SIZE; + break; + + case STATE_FIELD_SIZE: + if ( data == 0 ) + { + // Bad Size + std::ostringstream message; + message << "FIT decode error: Invalid Field Size " << data << ". Error at byte: " << currentByteOffset; + throw(RuntimeException(message.str())); + } + + localMesgDefs[localMesgIndex].GetFieldByIndex(fieldIndex)->SetSize(data); + state = STATE_FIELD_TYPE; + break; + + case STATE_FIELD_TYPE: + localMesgDefs[localMesgIndex].GetFieldByIndex(fieldIndex)->SetType(data); + + if (++fieldIndex >= numFields) + { + if (hasDevData) + { + state = STATE_NUM_DEV_FIELDS; + } + else + { + state = STATE_RECORD; + return RETURN_MESG_DEF; + } + } + else + { + state = STATE_FIELD_NUM; + } + break; + + case STATE_NUM_DEV_FIELDS: + numFields = data; + fieldIndex = 0; + + if (numFields == 0) + { + state = STATE_RECORD; + return RETURN_MESG_DEF; + } + + state = STATE_DEV_FIELD_NUM; + break; + + case STATE_DEV_FIELD_NUM: + fieldData[DevFieldNumOffset] = data; + state = STATE_DEV_FIELD_SIZE; + break; + + case STATE_DEV_FIELD_SIZE: + if ( data == 0 ) + { + // Bad Size + std::ostringstream message; + message << "FIT decode error: Invalid Developer Field Size " << data << ". Error at byte: " << currentByteOffset; + throw(RuntimeException(message.str())); + } + + fieldData[DevFieldSizeOffset] = data; + state = STATE_DEV_FIELD_INDEX; + break; + + case STATE_DEV_FIELD_INDEX: + fieldData[DevFieldIndexOffset] = data; + + try + { + const FieldDescriptionMesg& desc = descriptions + .at(fieldData[DevFieldIndexOffset]) + .at(fieldData[DevFieldNumOffset]); + const DeveloperDataIdMesg& developer = developers + .at( fieldData[DevFieldIndexOffset] ); + + localMesgDefs[localMesgIndex] + .AddDevField(DeveloperFieldDefinition(desc, developer, fieldData[DevFieldSizeOffset])); + } + catch (std::out_of_range) + { + // No Matching Description Message add a Generic Definition + localMesgDefs[localMesgIndex] + .AddDevField(DeveloperFieldDefinition( + fieldData[DevFieldNumOffset], + fieldData[DevFieldSizeOffset], + fieldData[DevFieldIndexOffset])); + } + + if (++fieldIndex >= numFields) + { + state = STATE_RECORD; + return RETURN_MESG_DEF; + } + + state = STATE_DEV_FIELD_NUM; + break; + + case STATE_FIELD_DATA: + if (fieldBytesLeft == 0) + { + fieldDataIndex = 0; + fieldBytesLeft = localMesgDefs[localMesgIndex].GetFieldByIndex(fieldIndex)->GetSize(); + + if (fieldBytesLeft == 0) + { + fieldBytesLeft = localMesgDefs[localMesgIndex].GetFieldByIndex(++fieldIndex)->GetSize(); + } + } + + fieldData[fieldDataIndex++] = data; + fieldBytesLeft--; + + if (fieldBytesLeft == 0) + { + MesgDefinition defn = localMesgDefs[localMesgIndex]; + FieldDefinition* fldDefn = defn.GetFieldByIndex(fieldIndex); + FIT_UINT8 baseType = fldDefn->GetType() & FIT_BASE_TYPE_NUM_MASK; + FIT_UINT8 typeSize = baseTypeSizes[baseType]; + FIT_BOOL read = FIT_TRUE; + + if (baseType < FIT_BASE_TYPES) // Ignore field if base type not supported. + { + UpdateEndianness(fldDefn->GetType(), fldDefn->GetSize()); + + Field field(mesg.GetNum(), fldDefn->GetNum()); + if (field.IsValid()) // If known field type. + { + if ( field.GetType() != fldDefn->GetType() ) + { + FIT_UINT8 profileSize = fit::baseTypeSizes[( field.GetType() & FIT_BASE_TYPE_NUM_MASK )]; + if ( typeSize < profileSize ) + { + field.SetBaseType( fldDefn->GetType() ); + } + else if ( typeSize != profileSize ) + { + // Demotion is hard. Don't read the field if the + // sizes are different. Use the profile type if the + // signedness of the field has changed. + read = FIT_FALSE; + } + } + + if ( read ) + { + field.Read(&fieldData, defn.GetFieldByIndex(fieldIndex)->GetSize()); + } + + // The special case time record. + if (defn.GetFieldByIndex(fieldIndex)->GetNum() == FIT_FIELD_NUM_TIMESTAMP) + { + timestamp = field.GetUINT32Value(); + lastTimeOffset = (FIT_UINT8)(timestamp & FIT_HDR_TIME_OFFSET_MASK); + } + + //Allows messages containing the accumulated field to set the accumulated value + if ( field.GetIsAccumulated() ) + { + FIT_UINT8 i; + for (i = 0; i < field.GetNumValues(); i++) + { + FIT_FLOAT64 value = field.GetRawValue(i); + FIT_UINT16 j; + for (j = 0; j < mesg.GetNumFields(); j++) + { + FIT_UINT16 k; + Field* containingField = mesg.GetFieldByIndex(j); + FIT_UINT16 numComponents = containingField->GetNumComponents(); + + for (k = 0; k < numComponents; k++) + { + const Profile::FIELD_COMPONENT* fc = containingField->GetComponent(k); + if ( ( fc->num == field.GetNum() ) && ( fc->accumulate ) ) + { + value = ((((value / field.GetScale()) - field.GetOffset()) + fc->offset) * fc->scale); + } + } + } + accumulator.Set(mesg.GetNum(), field.GetNum(), (FIT_UINT32)value); + } + } + + if (field.GetNumValues() > 0) + { + mesg.AddField(field); + } + } + } + fieldIndex++; + } + + if (fieldIndex >= localMesgDefs[localMesgIndex].GetFields().size()) + { + // Now that the entire message is decoded we may evaluate subfields and expand components + for (FIT_UINT16 i=0; iGetNumComponents() > 0) + { + ExpandComponents(mesg.GetFieldByIndex(i), mesg.GetFieldByIndex(i)->GetComponent(0), mesg.GetFieldByIndex(i)->GetNumComponents()); + } + } + else + { + if (mesg.GetFieldByIndex(i)->GetSubField(activeSubField)->numComponents > 0) + { + ExpandComponents(mesg.GetFieldByIndex(i), mesg.GetFieldByIndex(i)->GetSubField(activeSubField)->components, mesg.GetFieldByIndex(i)->GetSubField(activeSubField)->numComponents); + } + } + } + } + + if (localMesgDefs[localMesgIndex].GetDevFields().size() != 0) + { + fieldIndex = 0; + fieldBytesLeft = 0; + state = STATE_DEV_FIELD_DATA; + } + else + { + state = STATE_RECORD; + return RETURN_MESG; + } + } + break; + + case STATE_DEV_FIELD_DATA: { + MesgDefinition& localMesgDef = localMesgDefs[localMesgIndex]; + DeveloperFieldDefinition* fieldDef = localMesgDef.GetDevFieldByIndex(fieldIndex); + + if (fieldBytesLeft == 0) + { + fieldDataIndex = 0; + fieldBytesLeft = fieldDef->GetSize(); + + if (fieldBytesLeft == 0) + { + fieldBytesLeft = localMesgDefs-> + GetDevFieldByIndex(++fieldIndex)->GetSize(); + } + } + + fieldData[fieldDataIndex++] = data; + fieldBytesLeft--; + + if (fieldBytesLeft == 0) + { + MesgDefinition defn = localMesgDefs[localMesgIndex]; + DeveloperFieldDefinition* fldDefn = defn.GetDevFieldByIndex(fieldIndex); + FIT_UINT8 baseType = fldDefn->GetType() & FIT_BASE_TYPE_NUM_MASK; + + if (baseType < FIT_BASE_TYPES) // Ignore field if base type not supported. + { + DeveloperField field(*fldDefn); + + UpdateEndianness(fldDefn->GetType(), fldDefn->GetSize()); + field.Read(&fieldData, fldDefn->GetSize()); + mesg.AddDeveloperField(field); + } + + fieldIndex++; + + if (fieldIndex >= localMesgDef.GetDevFields().size()) { + // Mesg decode complete + state = STATE_RECORD; + return RETURN_MESG; + } + } + break; + } + + default: + break; + } + + return RETURN_CONTINUE; +} + +void Decode::SuppressComponentExpansion(void) +{ + suppressComponentExpansion = FIT_TRUE; +} + +void Decode::ExpandComponents(Field* containingField, const Profile::FIELD_COMPONENT* components, FIT_UINT16 numComponents) +{ + FIT_UINT16 offset = 0; + FIT_UINT16 i; + + for (i = 0; i < numComponents; i++) + { + const Profile::FIELD_COMPONENT* component = &components[i]; + + if (component->num != FIT_FIELD_NUM_INVALID) + { + Field componentField(mesg.GetNum(), component->num); + FIT_UINT16 subfieldIndex = mesg.GetActiveSubFieldIndex( componentField.GetNum() ); + FIT_FLOAT64 value; + FIT_UINT32 bitsValue = FIT_UINT32_INVALID; + FIT_SINT32 signedBitsValue = FIT_SINT32_INVALID; + + // Mark that this field has been generated through expansion + componentField.SetIsExpanded(FIT_TRUE); + + if (componentField.IsSignedInteger()) + { + signedBitsValue = containingField->GetBitsSignedValue(offset, component->bits); + + if (signedBitsValue == FIT_SINT32_INVALID) + break; // No more data for components. + + if (component->accumulate) + bitsValue = accumulator.Accumulate(mesg.GetNum(), component->num, signedBitsValue, component->bits); + } + else + { + bitsValue = containingField->GetBitsValue(offset, component->bits); + + if (bitsValue == FIT_UINT32_INVALID) + break; // No more data for components. + + if (component->accumulate) + bitsValue = accumulator.Accumulate(mesg.GetNum(), component->num, bitsValue, component->bits); + } + + // If the component field itself has *one* component apply the scale and offset of the componentField's + // (nested) component + if (componentField.GetNumComponents() == 1) + { + if(componentField.IsSignedInteger()) + value = (((signedBitsValue / (FIT_FLOAT64)component->scale) - component->offset) + componentField.GetComponent(0)->offset) * componentField.GetComponent(0)->scale; + else + value = (((bitsValue / (FIT_FLOAT64)component->scale) - component->offset) + componentField.GetComponent(0)->offset) * componentField.GetComponent(0)->scale; + if (mesg.HasField(componentField.GetNum())) + { + fit::Field *currentField = mesg.GetField(componentField.GetNum()); + currentField->AddRawValue(value, currentField->GetNumValues()); + } + else + { + componentField.AddRawValue(value, componentField.GetNumValues()); + mesg.AddField(componentField); + } + } + // The component field is itself a composite field (more than one component). Don't use scale/offset, containing + // field data must already be encoded. Add elements to it until we have added bitsvalue + else if (componentField.GetNumComponents() > 1) + { + int bitsAdded = 0; + long mask; + + while (bitsAdded < component->bits) + { + mask = ((long)1 << baseTypeSizes[componentField.GetType() & FIT_BASE_TYPE_NUM_MASK]) - 1; + if (mesg.HasField(componentField.GetNum())) + { + Field* field = mesg.GetField( componentField.GetNum() ); + field->AddValue( bitsValue & mask, field->GetNumValues() ); + } + else + { + componentField.AddValue(bitsValue & mask, componentField.GetNumValues()); + mesg.AddField(componentField); + } + bitsValue >>= baseTypeSizes[componentField.GetType() & FIT_BASE_TYPE_NUM_MASK]; + bitsAdded += baseTypeSizes[componentField.GetType() & FIT_BASE_TYPE_NUM_MASK]; + } + } + // componentField is an ordinary field, apply scale and offset as usual + else + { + if(componentField.IsSignedInteger()) + value = (((signedBitsValue / (FIT_FLOAT64)component->scale) - component->offset) + componentField.GetOffset(subfieldIndex)) * componentField.GetScale(subfieldIndex); + else + value = (((bitsValue / (FIT_FLOAT64)component->scale) - component->offset) + componentField.GetOffset(subfieldIndex)) * componentField.GetScale(subfieldIndex); + if (mesg.HasField(componentField.GetNum())) + { + fit::Field *currentField = mesg.GetField(componentField.GetNum()); + currentField->AddRawValue(value, currentField->GetNumValues()); + } + else + { + componentField.AddRawValue(value, componentField.GetNumValues()); + mesg.AddField(componentField); + } + } + } + offset += component->bits; + } +} + +} // namespace fit diff --git a/Sources/cppfit/fit_developer_field.cpp b/Sources/cppfit/fit_developer_field.cpp new file mode 100644 index 0000000..9a5fcbd --- /dev/null +++ b/Sources/cppfit/fit_developer_field.cpp @@ -0,0 +1,183 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_developer_field.hpp" +#include "fit_developer_field_definition.hpp" +#include "fit_unicode.hpp" + +namespace fit +{ +DeveloperField::DeveloperField(void) + : FieldBase() + , mDefinition(nullptr) +{ +} + +DeveloperField::DeveloperField(const DeveloperField& other) + : FieldBase(other) + , mDefinition(nullptr) +{ + if (nullptr != other.mDefinition) + { + mDefinition = new DeveloperFieldDefinition(*other.mDefinition); + } +} + +DeveloperField::DeveloperField(const DeveloperFieldDefinition& definition) + : FieldBase() + , mDefinition(new DeveloperFieldDefinition(definition)) +{ +} + +DeveloperField::DeveloperField(const FieldDescriptionMesg& definition, const DeveloperDataIdMesg& developer) + : FieldBase() + , mDefinition(new DeveloperFieldDefinition(definition, developer, 0)) +{ +} + +DeveloperField::~DeveloperField() +{ + if (nullptr != mDefinition) + { + delete mDefinition; + } +} + +FIT_BOOL DeveloperField::GetIsAccumulated() const +{ + return FIT_FALSE; +} + +FIT_BOOL DeveloperField::IsValid() const +{ + return nullptr != mDefinition; +} + +FIT_UINT8 DeveloperField::GetNum() const +{ + return mDefinition->GetNum(); +} + +std::string DeveloperField::GetName() const +{ + if (mDefinition->IsDefined()) + { + return Unicode::Encode_BaseToUTF8(mDefinition->GetDescription().GetFieldName(0)); + } + + return ""; +} + +FIT_UINT8 DeveloperField::GetType() const +{ + if (mDefinition->IsDefined()) + { + return mDefinition->GetType(); + } + + return FIT_BASE_TYPE_UINT8; +} + +std::string DeveloperField::GetUnits() const +{ + if (mDefinition->IsDefined()) + { + return Unicode::Encode_BaseToUTF8(mDefinition->GetDescription().GetUnits(0)); + } + + return ""; +} + +FIT_FLOAT64 DeveloperField::GetScale() const +{ + // Developer fields do not currently support scale + return 1.0; +} + +FIT_FLOAT64 DeveloperField::GetOffset() const +{ + // Developer fields do not currently support offset + return 0; +} + +const Profile::SUBFIELD* DeveloperField::GetSubField(const FIT_UINT16 subFieldIndex) const +{ + // Unused + (void)subFieldIndex; + return nullptr; +} + +FIT_UINT16 DeveloperField::GetNumSubFields() const +{ + return 0; +} + +const Profile::FIELD_COMPONENT* DeveloperField::GetComponent(const FIT_UINT16 component) const +{ + // Unused + (void)component; + return nullptr; +} + +FIT_UINT16 DeveloperField::GetNumComponents() const +{ + return 0; +} + +std::vector DeveloperField::GetAppId() const +{ + std::vector < FIT_BYTE > returnVal; + if ( mDefinition->IsDefined() ) + { + const DeveloperDataIdMesg& developer = mDefinition->GetDeveloper(); + returnVal.resize( developer.GetNumApplicationId() ); + for ( FIT_UINT8 i = 0; i < developer.GetNumApplicationId(); i++ ) + { + returnVal[i] = developer.GetApplicationId( i ); + } + } + + return returnVal; +} + +FIT_UINT32 DeveloperField::GetAppVersion() const +{ + if ( mDefinition->IsDefined() ) + { + const DeveloperDataIdMesg& developer = mDefinition->GetDeveloper(); + return developer.GetApplicationVersion(); + } + + return 0; +} + +FIT_UINT8 DeveloperField::GetNativeOverride() const +{ + if ( mDefinition->IsDefined() ) + { + const FieldDescriptionMesg& description = mDefinition->GetDescription(); + FIT_UINT8 nativeNum = description.GetNativeFieldNum(); + + if ( FIT_UINT8_INVALID != nativeNum ) + { + return nativeNum; + } + } + + return FIT_FIELD_NUM_INVALID; +} + +const DeveloperFieldDefinition& DeveloperField::GetDefinition() const +{ + return *mDefinition; +} +} // namespace fit diff --git a/Sources/cppfit/fit_developer_field_definition.cpp b/Sources/cppfit/fit_developer_field_definition.cpp new file mode 100644 index 0000000..d449d96 --- /dev/null +++ b/Sources/cppfit/fit_developer_field_definition.cpp @@ -0,0 +1,182 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include +#include "fit_developer_field_definition.hpp" +#include "fit_developer_field.hpp" + +namespace fit +{ + +DeveloperFieldDefinition::DeveloperFieldDefinition() + : num( FIT_FIELD_NUM_INVALID ) + , size( 0 ) + , developerDataIndex( FIT_UINT8_INVALID ) + , mesg( nullptr ) + , developer( nullptr ) +{ +} + +DeveloperFieldDefinition::DeveloperFieldDefinition(const DeveloperFieldDefinition& other) + : num( other.num ) + , size( other.size ) + , developerDataIndex( other.developerDataIndex ) + , mesg( nullptr ) + , developer( nullptr ) +{ + if (nullptr != other.mesg) + { + mesg = new FieldDescriptionMesg( *other.mesg ); + } + + if ( nullptr != other.developer ) + { + developer = new DeveloperDataIdMesg( *other.developer ); + } +} + +DeveloperFieldDefinition::DeveloperFieldDefinition(FIT_UINT8 fieldNum, FIT_UINT8 size, FIT_UINT8 developerDataIndex) + : num( fieldNum ) + , size( size ) + , developerDataIndex( developerDataIndex ) + , mesg( nullptr ) + , developer( nullptr ) +{ +} + +DeveloperFieldDefinition::DeveloperFieldDefinition( const FieldDescriptionMesg& desc, const DeveloperDataIdMesg& developer, FIT_UINT8 size ) + : num( desc.GetFieldDefinitionNumber() ) + , size( size ) + , developerDataIndex( desc.GetDeveloperDataIndex() ) + , mesg( new FieldDescriptionMesg( desc ) ) + , developer( new DeveloperDataIdMesg( developer ) ) +{ +} + +DeveloperFieldDefinition::DeveloperFieldDefinition(const DeveloperField& field) + : DeveloperFieldDefinition(field.GetDefinition()) +{ + size = field.GetSize(); +} + +DeveloperFieldDefinition::~DeveloperFieldDefinition() +{ + if ( nullptr != mesg ) + { + delete mesg; + mesg = nullptr; + } + + if ( nullptr != developer ) + { + delete developer; + developer = nullptr; + } +} + +FIT_BOOL DeveloperFieldDefinition::IsDefined() const +{ + return nullptr != mesg && + nullptr != developer; +} + +FIT_UINT8 DeveloperFieldDefinition::GetNum() const +{ + return num; +} + +FIT_UINT8 DeveloperFieldDefinition::GetSize() const +{ + return size; +} + +FIT_UINT8 DeveloperFieldDefinition::GetType() const +{ + if (IsDefined()) + { + return mesg->GetFitBaseTypeId(); + } + + return FIT_BASE_TYPE_UINT8; +} + +FIT_UINT8 DeveloperFieldDefinition::GetDeveloperDataIndex() const +{ + return developerDataIndex; +} + +const FieldDescriptionMesg& DeveloperFieldDefinition::GetDescription() const +{ + return *mesg; +} + +const DeveloperDataIdMesg& DeveloperFieldDefinition::GetDeveloper() const +{ + return *developer; +} + +FIT_BOOL DeveloperFieldDefinition::operator==(const DeveloperFieldDefinition& field) const +{ + if (num != field.num) + return FIT_FALSE; + + if (developerDataIndex != field.developerDataIndex) + return FIT_FALSE; + + return FIT_TRUE; +} + +FIT_BOOL DeveloperFieldDefinition::operator!=(const DeveloperFieldDefinition& field) const +{ + return !(*this == field); +} + +FIT_UINT8 DeveloperFieldDefinition::Write(std::ostream &file) const +{ + file.put(num); + file.put(size); + file.put(developerDataIndex); + + return 3; +} + +DeveloperFieldDefinition& DeveloperFieldDefinition::operator=(const DeveloperFieldDefinition& other) +{ + if (this != &other) + { + num = other.num; + size = other.size; + developerDataIndex = other.developerDataIndex; + + if (other.mesg != nullptr) + { + if (mesg != nullptr) + { + delete mesg; + } + mesg = new FieldDescriptionMesg(*other.mesg); + } + + if (other.developer != nullptr) + { + if(developer != nullptr) + { + delete developer; + }; + developer = new DeveloperDataIdMesg(*other.developer); + } + } + + return *this; +} + +} // namespace fit diff --git a/Sources/cppfit/fit_developer_field_description.cpp b/Sources/cppfit/fit_developer_field_description.cpp new file mode 100644 index 0000000..bbab998 --- /dev/null +++ b/Sources/cppfit/fit_developer_field_description.cpp @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_developer_field_description.hpp" + +namespace fit +{ +DeveloperFieldDescription::DeveloperFieldDescription + ( + const DeveloperFieldDescription& other + ) + : description( new FieldDescriptionMesg( *other.description ) ) + , developer( new DeveloperDataIdMesg( *other.developer ) ) +{ + +} + +DeveloperFieldDescription::DeveloperFieldDescription + ( + const FieldDescriptionMesg& desc, + const DeveloperDataIdMesg& developer + ) + : description( new FieldDescriptionMesg( desc ) ) + , developer( new DeveloperDataIdMesg( developer ) ) +{ +} + +DeveloperFieldDescription::~DeveloperFieldDescription() +{ + delete developer; + delete description; +} + +FIT_UINT32 DeveloperFieldDescription::GetApplicationVersion() const +{ + return developer->GetApplicationVersion(); +} + +FIT_UINT8 DeveloperFieldDescription::GetFieldDefinitionNumber() const +{ + return description->GetFieldDefinitionNumber(); +} + +std::vector DeveloperFieldDescription::GetApplicationId() const +{ + // This is a UUID, and thus we expect the return value to be exactly 16 bytes. + // if it is not we will return an empty vector + std::vector< FIT_UINT8 > rv( 16 ); + + if ( developer->GetNumApplicationId() == 16 ) + { + for ( FIT_UINT8 i = 0; i < 16; i++ ) + { + rv[i] = developer->GetApplicationId( i ); + } + } + + return rv; +} +} // namespace fit diff --git a/Sources/cppfit/fit_encode.cpp b/Sources/cppfit/fit_encode.cpp new file mode 100644 index 0000000..4df11e3 --- /dev/null +++ b/Sources/cppfit/fit_encode.cpp @@ -0,0 +1,126 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include +#include "fit_encode.hpp" +#include "fit_crc.hpp" + +namespace fit +{ +Encode::Encode() + : Encode( ProtocolVersion::V10 ) {} + +Encode::Encode( ProtocolVersion version ) + : dataSize( 0 ) + , file( nullptr ) + , version( version ) + , validator( version ) {} + +void Encode::Open(std::iostream &file) +{ + this->file = &file; + WriteFileHeader(); +} + +void Encode::Write( const MesgDefinition& mesgDef ) +{ + if ( !file ) + return; + + if ( !validator.ValidateMesgDefn( mesgDef ) ) + return; + + dataSize += mesgDef.Write( *file ); + lastMesgDefinition[mesgDef.GetLocalNum()] = mesgDef; +} + +void Encode::Write( const Mesg& mesg ) +{ + MesgDefinition mesgDefinition( mesg ); + + if ( !file ) + return; + + if ( !validator.ValidateMesg( mesg ) ) + return; + + if ( !lastMesgDefinition[mesg.GetLocalNum()].Supports( mesgDefinition ) ) + Write( mesgDefinition ); + + dataSize += mesg.Write( *file, &( lastMesgDefinition[mesg.GetLocalNum()] ) ); +} + +void Encode::Write( const std::vector& mesgs ) +{ + for ( std::vector::size_type i = 0; i < mesgs.size(); i++ ) + Write( mesgs[i] ); +} + +FIT_BOOL Encode::Close( void ) +{ + FIT_UINT32 fileBytesLeft = FIT_FILE_HDR_SIZE + dataSize; + FIT_UINT16 crc = 0; + + if ( !file ) + return FIT_FALSE; + + WriteFileHeader(); + + file->seekg( 0, std::ios::beg ); + + while ( fileBytesLeft > 0 ) + { + FIT_UINT8 byte = ( FIT_UINT8 )file->get(); + + if ( file->eof() ) + return FIT_FALSE; // File smaller than expected. + + crc = CRC::Get16( crc, byte ); + fileBytesLeft--; + } + + file->seekp( 0, std::ios::end ); + file->put( crc & 0xFF ); + file->put( ( char )( crc >> 8 ) ); + + return FIT_TRUE; +} + +void Encode::OnMesg( Mesg& mesg ) +{ + Write( mesg ); +} + +void Encode::OnMesgDefinition( MesgDefinition& mesgDef ) +{ + Write( mesgDef ); +} + +void Encode::WriteFileHeader() +{ + FIT_FILE_HDR file_header; + + if ( !file ) + return; + + file_header.header_size = FIT_FILE_HDR_SIZE; + file_header.profile_version = FIT_PROFILE_VERSION; + file_header.protocol_version = fit::versionMap.at( version ).GetVersionByte(); + memcpy( ( FIT_UINT8 * )&file_header.data_type, ".FIT", 4 ); + file_header.data_size = dataSize; + file_header.crc = CRC::Calc16( &file_header, FIT_STRUCT_OFFSET(crc, FIT_FILE_HDR) ); + + file->seekp( 0, std::ios::beg ); + file->write( ( const char * )&file_header, FIT_FILE_HDR_SIZE ); +} +} // namespace fit + diff --git a/Sources/cppfit/fit_field.cpp b/Sources/cppfit/fit_field.cpp new file mode 100644 index 0000000..f125d0a --- /dev/null +++ b/Sources/cppfit/fit_field.cpp @@ -0,0 +1,169 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include +#include +#include "fit_field.hpp" +#include "fit_mesg.hpp" +#include "fit_unicode.hpp" + +namespace fit +{ + +Field::Field(void) + : FieldBase() + , profile(NULL) + , type(FIT_UINT8_INVALID) + , isFieldExpanded(FIT_FALSE) +{ +} + +Field::Field(const Field &field) + : FieldBase(field) + , profile(field.profile) + , profileIndex(field.profileIndex) + , type(field.type) + , isFieldExpanded(field.isFieldExpanded) +{ +} + +Field::Field(const Profile::MESG_INDEX mesgIndex, const FIT_UINT16 fieldIndex) + : FieldBase() + , profile(&Profile::mesgs[mesgIndex]) + , profileIndex(fieldIndex) + , type(FIT_UINT8_INVALID) + , isFieldExpanded(FIT_FALSE) +{ +} + +Field::Field(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum) + : FieldBase() + , profile(Profile::GetMesg(mesgNum)) + , profileIndex(Profile::GetFieldIndex(mesgNum, fieldNum)) + , type(FIT_UINT8_INVALID) + , isFieldExpanded(FIT_FALSE) +{ +} + +Field::Field(const std::string& mesgName, const std::string& fieldName) + : FieldBase() + , profile(Profile::GetMesg(mesgName)) + , profileIndex(Profile::GetFieldIndex(mesgName, fieldName)) + , type(FIT_UINT8_INVALID) + , isFieldExpanded(FIT_FALSE) +{ +} + +void Field::SetBaseType( FIT_UINT8 type ) +{ + this->type = type; +} + +FIT_BOOL Field::IsValid(void) const +{ + return profileIndex != FIT_UINT16_INVALID; +} + +FIT_BOOL Field::GetIsAccumulated() const +{ + return profile->fields[profileIndex].isAccumulated; +} + +FIT_UINT16 Field::GetIndex(void) const +{ + return profileIndex; +} + +std::string Field::GetName() const +{ + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return "unknown"; + return profile->fields[profileIndex].name; +} + +FIT_UINT8 Field::GetNum(void) const +{ + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return FIT_FIELD_NUM_INVALID; + return profile->fields[profileIndex].num; +} + +FIT_UINT8 Field::GetType() const +{ + if ( type != FIT_UINT8_INVALID ) + return type; + + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return FIT_UINT8_INVALID; + + return profile->fields[profileIndex].type; +} + +std::string Field::GetUnits() const +{ + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return ""; + return profile->fields[profileIndex].units; +} + +FIT_FLOAT64 Field::GetScale() const +{ + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return 1; + return profile->fields[profileIndex].scale; +} + +FIT_FLOAT64 Field::GetOffset() const +{ + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return 0; + return profile->fields[profileIndex].offset; +} + +FIT_UINT16 Field::GetNumComponents(void) const +{ + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return 0; + return profile->fields[profileIndex].numComponents; +} + +FIT_UINT16 Field::GetNumSubFields(void) const +{ + if ((profile == NULL) || (profileIndex >= profile->numFields)) + return 0; + return profile->fields[profileIndex].numSubFields; +} + +FIT_BOOL Field::GetIsExpanded(void) const +{ + return isFieldExpanded; +} + +void Field::SetIsExpanded(FIT_BOOL newValue) +{ + isFieldExpanded = newValue; +} + +const Profile::FIELD_COMPONENT* Field::GetComponent(const FIT_UINT16 component) const +{ + if (component >= GetNumComponents()) + return NULL; + return &profile->fields[profileIndex].components[component]; +} + +const Profile::SUBFIELD* Field::GetSubField(const FIT_UINT16 subFieldIndex) const +{ + if (subFieldIndex >= GetNumSubFields()) + return NULL; + return &profile->fields[profileIndex].subFields[subFieldIndex]; +} +} // namespace fit diff --git a/Sources/cppfit/fit_field_base.cpp b/Sources/cppfit/fit_field_base.cpp new file mode 100644 index 0000000..cc9a7b0 --- /dev/null +++ b/Sources/cppfit/fit_field_base.cpp @@ -0,0 +1,1200 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include +#include +#include "fit_field_base.hpp" +#include "fit_mesg.hpp" +#include "fit_unicode.hpp" + +namespace fit +{ + +FieldBase::FieldBase(void) +{ +} + +FieldBase::FieldBase(const FieldBase &field) +{ + values = field.values; + stringIndexes = field.stringIndexes; +} + +FieldBase::~FieldBase() +{ +} + +std::string FieldBase::GetName(const FIT_UINT16 subFieldIndex) const +{ + if (subFieldIndex >= GetNumSubFields()) + return GetName(); + + auto subfield = GetSubField(subFieldIndex); + return NULL != subfield ? subfield->name : "unknown"; +} + +FIT_UINT8 FieldBase::GetType(const FIT_UINT16 subFieldIndex) const +{ + if (subFieldIndex >= GetNumSubFields()) + return GetType(); + + auto subfield = GetSubField(subFieldIndex); + return NULL != subfield ? subfield->type : FIT_UINT8_INVALID; +} + +std::string FieldBase::GetUnits(const FIT_UINT16 subFieldIndex) const +{ + if (subFieldIndex >= GetNumSubFields()) + return GetUnits(); + + auto subfield = GetSubField(subFieldIndex); + return NULL != subfield ? subfield->units : ""; +} + +FIT_FLOAT64 FieldBase::GetScale(const FIT_UINT16 subFieldIndex) const +{ + if (subFieldIndex >= GetNumSubFields()) + return GetScale(); + + auto subfield = GetSubField(subFieldIndex); + return NULL != subfield ? subfield->scale : 1.0; +} + +FIT_FLOAT64 FieldBase::GetOffset(const FIT_UINT16 subFieldIndex) const +{ + if (subFieldIndex >= GetNumSubFields()) + return GetOffset(); + + auto subfield = GetSubField(subFieldIndex); + return NULL != subfield ? subfield->offset : 0.0; +} + +FIT_BOOL FieldBase::IsSignedInteger(const FIT_UINT16 subFieldIndex) const +{ + switch (GetType(subFieldIndex)) { + case FIT_BASE_TYPE_SINT8: + case FIT_BASE_TYPE_SINT16: + case FIT_BASE_TYPE_SINT32: + return FIT_TRUE; + + default: + return FIT_FALSE; + } +} + +FIT_UINT8 FieldBase::GetSize(void) const +{ + if (!IsValid()) + return 0; + + return (FIT_UINT8)values.size(); +} + +FIT_UINT8 FieldBase::GetNumValues(void) const +{ + if (!IsValid()) + return 0; + + if (GetType() != FIT_BASE_TYPE_STRING) + return (FIT_UINT8)(values.size() / baseTypeSizes[GetType() & FIT_BASE_TYPE_NUM_MASK]); + + return (FIT_UINT8)stringIndexes.size(); +} + +FIT_UINT32 FieldBase::GetBitsValue(const FIT_UINT16 offset, const FIT_UINT8 bits) const +{ + FIT_UINT32 value = 0; + FIT_UINT8 numValueBits = 0; + FIT_UINT8 numDataBitsUsed; + FIT_UINT8 index = 0; + FIT_UINT8 data; + FIT_UINT8 mask; + FIT_UINT16 newOffset = offset; + + if (values.size() == 0) + return FIT_UINT32_INVALID; + + while (numValueBits < bits) + { + if (index >= GetSize()) + return FIT_UINT32_INVALID; + + if (newOffset >= 8) + { + newOffset -= 8; + } + else + { + // Get Nth byte from the jagged array considering elements may be multibyte + data = GetValuesUINT8(index); + // Shift out the bits we do not want to use + data >>= newOffset; + // Record how many bits we are using + numDataBitsUsed = 8 - (FIT_UINT8)newOffset; + // Use every byte after this until we have enough bits + newOffset = 0; + + // If the number of data bits will overflow the number of bits we want in the + // final value, only use as many as will fit + if (numDataBitsUsed > (bits - numValueBits)) + numDataBitsUsed = bits - numValueBits; + + mask = (1 << numDataBitsUsed) - 1; + // OR the data from this byte into our final value, then update number of bits + // in our final value + value |= (FIT_UINT32)(data & mask) << numValueBits; + numValueBits += numDataBitsUsed; + } + index++; + } + + return value; +} + +FIT_SINT32 FieldBase::GetBitsSignedValue(const FIT_UINT16 offset, const FIT_UINT8 bits) const +{ + FIT_UINT32 value; + FIT_SINT32 signedValue; + + value = GetBitsValue(offset, bits); + + if (value == FIT_UINT32_INVALID) + return FIT_SINT32_INVALID; + + signedValue = (1 << (bits - 1)); + + if ((value & signedValue) != 0) // sign bit set + signedValue = -signedValue + (value & (signedValue - 1)); + else + signedValue = value; + + return signedValue; +} + +FIT_BYTE FieldBase::GetValuesBYTE(FIT_UINT8 index) const +{ + /// Returns the Nth byte of the jagged values array + if (index >= GetSize()) + { + return FIT_BYTE_INVALID; + } + + return values[index]; +} + +FIT_UINT8 FieldBase::GetValuesUINT8(FIT_UINT8 index) const +{ + /// Returns the Nth byte of the jagged values array + if (index >= GetSize()) + { + return FIT_UINT8_INVALID; + } + + return values[index]; +} + +FIT_SINT8 FieldBase::GetValuesSINT8(FIT_UINT8 index) const +{ + /// Returns the Nth byte of the jagged values array + if (index >= GetSize()) + { + return FIT_SINT8_INVALID; + } + + return values[index]; +} + +FIT_ENUM FieldBase::GetENUMValue(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_BYTE FieldBase::GetBYTEValue(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_SINT8 FieldBase::GetSINT8Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT8 FieldBase::GetUINT8Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT8Z FieldBase::GetUINT8ZValue(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_SINT16 FieldBase::GetSINT16Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT16 FieldBase::GetUINT16Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT16Z FieldBase::GetUINT16ZValue(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_SINT32 FieldBase::GetSINT32Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT32 FieldBase::GetUINT32Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT32Z FieldBase::GetUINT32ZValue(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_SINT64 FieldBase::GetSINT64Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT64 FieldBase::GetUINT64Value(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_UINT64Z FieldBase::GetUINT64ZValue(const FIT_UINT8 fieldArrayIndex) const +{ + return GetValue(fieldArrayIndex); +} + +FIT_FLOAT32 FieldBase::GetFLOAT32Value(const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + FIT_FLOAT32 float32Value; + + if (!IsValid()) + return FIT_FLOAT32_INVALID; + + switch (GetType()) { // Note: This checks the type of the MAIN field since data is aligned according to that type + case FIT_BASE_TYPE_BYTE: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_ENUM: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_SINT8: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_UINT8: + case FIT_BASE_TYPE_UINT8Z: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_SINT16: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_UINT16: + case FIT_BASE_TYPE_UINT16Z: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_SINT32: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_UINT32: + case FIT_BASE_TYPE_UINT32Z: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_SINT64: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_UINT64: + case FIT_BASE_TYPE_UINT64Z: + { + float32Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT32); + break; + } + + case FIT_BASE_TYPE_FLOAT32: + { + FIT_SINT32 sint32Value = GetSINT32Value(fieldArrayIndex); + + if (sint32Value == FIT_SINT32_INVALID) + return FIT_FLOAT32_INVALID; + + memcpy(&float32Value, &sint32Value, sizeof(FIT_FLOAT32)); + break; + } + + case FIT_BASE_TYPE_FLOAT64: + return static_cast(GetFLOAT64Value(fieldArrayIndex)); + + default: + return FIT_FLOAT32_INVALID; + } + + if (memcmp(&float32Value, baseTypeInvalids[FIT_BASE_TYPE_FLOAT32 & FIT_BASE_TYPE_NUM_MASK], sizeof(FIT_FLOAT32)) == 0) + { + return float32Value; + } + + return static_cast(static_cast(float32Value) / GetScale(subFieldIndex) - GetOffset(subFieldIndex)); +} + +FIT_FLOAT64 FieldBase::GetFLOAT64Value(const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + FIT_FLOAT64 float64Value; + + if (!IsValid()) + return FIT_FLOAT64_INVALID; + + switch (GetType()) { // Note: This checks the type of the MAIN field since data is aligned according to that type + case FIT_BASE_TYPE_BYTE: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_ENUM: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_SINT8: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_UINT8: + case FIT_BASE_TYPE_UINT8Z: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_SINT16: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_UINT16Z: + case FIT_BASE_TYPE_UINT16: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_SINT32: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_UINT32: + case FIT_BASE_TYPE_UINT32Z: + { + float64Value = + ConvertBaseType(fieldArrayIndex, FIT_BASE_TYPE_FLOAT64); + break; + } + + case FIT_BASE_TYPE_FLOAT32: + { + FIT_FLOAT32 val = GetFLOAT32Value(fieldArrayIndex, subFieldIndex); + + if (FIT_FLOAT32_INVALID == val) + { + return FIT_FLOAT64_INVALID; + } + + return static_cast(val); + } + + case FIT_BASE_TYPE_FLOAT64: + { + FIT_UINT64 uint64Value = GetValue(fieldArrayIndex); + memcpy(&float64Value, &uint64Value, sizeof(FIT_FLOAT64)); + break; + } + + default: + return FIT_FLOAT64_INVALID; + } + + if (memcmp(&float64Value, baseTypeInvalids[FIT_BASE_TYPE_FLOAT64 & FIT_BASE_TYPE_NUM_MASK], sizeof(FIT_FLOAT64)) == 0) + { + return float64Value; + } + + return float64Value / GetScale(subFieldIndex) - GetOffset(subFieldIndex); +} + +FIT_WSTRING FieldBase::GetSTRINGValue(const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + Unicode::UTF8_STRING value; + + if (!IsValid()) + return FIT_WSTRING_INVALID; + + if (GetType() == FIT_BASE_TYPE_STRING) // Note: This checks the type of the MAIN field since data is aligned according to that type + { + FIT_UINT8 numStrings = (FIT_UINT8)stringIndexes.size(); + + if (numStrings == 0) + return FIT_WSTRING_INVALID; + + FIT_UINT8 i = 0; + // Get the start position of the string in the byte array + FIT_UINT8 index = stringIndexes[fieldArrayIndex]; + FIT_UINT8 length; + + // If this is the last string, its length is the size of the array subtracted + // by its start position. + if (fieldArrayIndex + 1 == numStrings) + { + length = (FIT_UINT8)(values.size() - index); + } + // Otherwise it is the distance between its start position and the start + // position of the next string in the byte array. + else + { + length = stringIndexes[fieldArrayIndex + 1] - index; + } + + while ((i < length) && (values[index + i] != 0)) + { + value += static_cast(values[index + i]); + i++; + } + } + else + { + FIT_FLOAT64 floatValue = GetFLOAT64Value(fieldArrayIndex, subFieldIndex); + + if (floatValue != FIT_FLOAT64_INVALID) + { + Unicode::UTF8_OSSTREAM valueStream; + valueStream.setf(std::ios_base::fixed); + valueStream.precision(9); + valueStream << floatValue; + value = valueStream.str(); + + if ((value.find('.') != Unicode::UTF8_STRING::npos) && (value[value.length() - 1] == '0')) + { + Unicode::UTF8_STRING::size_type lastZeroIndex = value.length() - 1; + + while (value[lastZeroIndex - 1] == '0') + lastZeroIndex--; + + if (value[lastZeroIndex - 1] == '.') + value.erase(lastZeroIndex - 1); + else + value.erase(lastZeroIndex); + } + } + else + { + value = ""; + } + } + + return Unicode::Encode_UTF8ToBase(value); +} + +FIT_UINT16 FieldBase::GetSubField(const std::string& subFieldName) const +{ + for (FIT_UINT16 i = 0; i < this->GetNumSubFields(); i++) { + if ( this->GetSubField(i)->name.compare(subFieldName) == 0) + return i; + } + + return FIT_SUBFIELD_INDEX_MAIN_FIELD; +} + +FIT_FLOAT64 FieldBase::GetRawValue() const +{ + return GetRawValueInternal(0); +} + +FIT_FLOAT64 FieldBase::GetRawValue(const FIT_UINT8 fieldArrayIndex) const +{ + return GetRawValueInternal(fieldArrayIndex); +} + +FIT_BOOL FieldBase::GetMemoryValue( const FIT_UINT8 fieldArrayIndex, FIT_UINT8* buffer, const FIT_UINT8 bufferSize ) const +{ + FIT_UINT8 baseTypeSize = baseTypeSizes[GetType() & FIT_BASE_TYPE_NUM_MASK]; + FIT_UINT8 offsetIndex = baseTypeSize * fieldArrayIndex; + if ( bufferSize < baseTypeSize ) + { + // Buffer is not large enough + return FIT_FALSE; + } + + if ( static_cast(offsetIndex + baseTypeSize) > values.size() ) + { + // Values do not contain valid Data + return FIT_FALSE; + } + + for ( FIT_UINT8 i = 0; i < baseTypeSize; i++ ) + { + buffer[i] = values[offsetIndex + i]; + } + + return FIT_TRUE; +} + +FIT_FLOAT64 FieldBase::GetRawValueInternal(const FIT_UINT8 fieldArrayIndex) const +{ + FIT_FLOAT64 float64Value; + + if (!IsValid()) + return FIT_FLOAT64_INVALID; + + switch (GetType()) { // Note: This checks the type of the MAIN field since data is aligned according to that type + case FIT_BASE_TYPE_BYTE: + { + FIT_BYTE byteValue = GetBYTEValue(fieldArrayIndex); + + if (byteValue == FIT_BYTE_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = byteValue; + break; + } + + case FIT_BASE_TYPE_ENUM: + { + FIT_ENUM enumValue = GetENUMValue(fieldArrayIndex); + + if (enumValue == FIT_ENUM_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = enumValue; + break; + } + + case FIT_BASE_TYPE_SINT8: + { + FIT_SINT8 sint8Value = GetSINT8Value(fieldArrayIndex); + + if (sint8Value == FIT_SINT8_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = sint8Value; + break; + } + + case FIT_BASE_TYPE_UINT8: + { + FIT_UINT8 uint8Value = GetUINT8Value(fieldArrayIndex); + + if (uint8Value == FIT_UINT8_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = uint8Value; + break; + } + + case FIT_BASE_TYPE_UINT8Z: + { + FIT_UINT8Z uint8zValue = GetUINT8ZValue(fieldArrayIndex); + + if (uint8zValue == FIT_UINT8Z_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = uint8zValue; + break; + } + + case FIT_BASE_TYPE_SINT16: + { + FIT_SINT16 sint16Value = GetSINT16Value(fieldArrayIndex); + + if (sint16Value == FIT_SINT16_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = sint16Value; + break; + } + + case FIT_BASE_TYPE_UINT16: + { + FIT_UINT16 uint16Value = GetUINT16Value(fieldArrayIndex); + + if (uint16Value == FIT_UINT16_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = uint16Value; + break; + } + + case FIT_BASE_TYPE_UINT16Z: + { + FIT_UINT16Z uint16zValue = GetUINT16ZValue(fieldArrayIndex); + + if (uint16zValue == FIT_UINT16Z_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = uint16zValue; + break; + } + + case FIT_BASE_TYPE_SINT32: + { + FIT_SINT32 sint32Value = GetSINT32Value(fieldArrayIndex); + + if (sint32Value == FIT_SINT32_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = sint32Value; + break; + } + + case FIT_BASE_TYPE_UINT32: + { + FIT_UINT32 uint32Value = GetUINT32Value(fieldArrayIndex); + + if (uint32Value == FIT_UINT32_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = uint32Value; + break; + } + + case FIT_BASE_TYPE_UINT32Z: + { + FIT_UINT32Z uint32zValue = GetUINT32ZValue(fieldArrayIndex); + + if (uint32zValue == FIT_UINT32Z_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = uint32zValue; + break; + } + + case FIT_BASE_TYPE_FLOAT32: + { + FIT_FLOAT32 float32Value = GetFLOAT32Value(fieldArrayIndex); + + if (float32Value == FIT_FLOAT32_INVALID) + return FIT_FLOAT64_INVALID; + + float64Value = float32Value; + break; + } + + case FIT_BASE_TYPE_FLOAT64: + { + unsigned long long uint64Value = 0; + + if (fieldArrayIndex >= (FIT_UINT8)values.size()) + return FIT_FLOAT64_INVALID; + + for (size_t i = 0; i < sizeof(FIT_UINT64); i++) + { + uint64Value |= ( values[(fieldArrayIndex * sizeof(FIT_UINT64)) + i] << (i * 8) ); + } + + memcpy(&float64Value, &uint64Value, sizeof(FIT_FLOAT64)); + break; + } + + default: + return FIT_FLOAT64_INVALID; + } + + return float64Value; +} + +void FieldBase::AddValue(const FIT_FLOAT64 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + SetFLOAT64Value( value, fieldArrayIndex, subFieldIndex ); +} + +// rawValue is already the correct quantity (scale/offsets applied) but possibly not the +// correct underlying type +void FieldBase::AddRawValue(const FIT_FLOAT64 rawValue, const FIT_UINT8 fieldArrayIndex) +{ + FIT_FLOAT64 roundedValue = FieldBase::Round(rawValue); + switch ( GetType() ) + { + case FIT_BASE_TYPE_BYTE: + case FIT_BASE_TYPE_ENUM: + case FIT_BASE_TYPE_SINT8: + case FIT_BASE_TYPE_UINT8: + case FIT_BASE_TYPE_UINT8Z: + SetUINT8Value((FIT_UINT8)roundedValue, fieldArrayIndex); + break; + + case FIT_BASE_TYPE_SINT16: + case FIT_BASE_TYPE_UINT16: + case FIT_BASE_TYPE_UINT16Z: + SetUINT16Value((FIT_UINT16)roundedValue, fieldArrayIndex); + break; + + case FIT_BASE_TYPE_SINT32: + case FIT_BASE_TYPE_UINT32: + case FIT_BASE_TYPE_UINT32Z: + SetUINT32Value((FIT_UINT32)roundedValue, fieldArrayIndex); + break; + + case FIT_BASE_TYPE_FLOAT32: + { + FIT_FLOAT32 float32Value = (FIT_FLOAT32)roundedValue; + FIT_UINT32 uint32Value; + memcpy(&uint32Value, &float32Value, sizeof(FIT_FLOAT32)); + SetUINT32Value(uint32Value, fieldArrayIndex); + break; + } + + case FIT_BASE_TYPE_FLOAT64: + if ((FIT_UINT8)values.size() < ((fieldArrayIndex + 1) * sizeof(FIT_FLOAT64))) + { + values.resize((fieldArrayIndex + 1) * 8); + } + + for (size_t i = 0; i < sizeof(FIT_FLOAT64); i++) + { + values[(fieldArrayIndex * sizeof(FIT_FLOAT64) + i)] = (*(((FIT_BYTE *)&rawValue) + i)); + } + break; + + default: + break; + } +} + + +void FieldBase::SetENUMValue(const FIT_ENUM value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT8Value(value, fieldArrayIndex); +} + +void FieldBase::SetBYTEValue(const FIT_BYTE value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT8Value(value, fieldArrayIndex); +} + +void FieldBase::SetSINT8Value(const FIT_SINT8 value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT8Value(value, fieldArrayIndex); +} + +void FieldBase::SetUINT8Value(const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex) +{ + if ((FIT_UINT8)values.size() < (fieldArrayIndex + 1)) + { + values.resize(fieldArrayIndex + 1); + } + + values[fieldArrayIndex] = (FIT_BYTE)value; +} + +void FieldBase::SetUINT8ZValue(const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT8Value(value, fieldArrayIndex); +} + +void FieldBase::SetSINT16Value(const FIT_SINT16 value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT16Value(value, fieldArrayIndex); +} + +void FieldBase::SetUINT16Value(const FIT_UINT16 value, const FIT_UINT8 fieldArrayIndex) +{ + if ((FIT_UINT8)values.size() < ((fieldArrayIndex + 1) * sizeof(FIT_UINT16))) + { + values.resize((fieldArrayIndex + 1) * sizeof(FIT_UINT16)); + } + + for (size_t i = 0; i < sizeof(FIT_UINT16); i++) + { + values[(fieldArrayIndex * sizeof(FIT_UINT16)) + i] = ((FIT_BYTE)(value >> (8 * i))); + } +} + +void FieldBase::SetUINT16ZValue(const FIT_UINT16Z value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT16Value(value, fieldArrayIndex); +} + +void FieldBase::SetSINT32Value(const FIT_SINT32 value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT32Value(value, fieldArrayIndex); +} + +void FieldBase::SetUINT32Value(const FIT_UINT32 value, const FIT_UINT8 fieldArrayIndex) +{ + if ((FIT_UINT8)values.size() < ((fieldArrayIndex + 1) * sizeof(FIT_UINT32))) + { + values.resize((fieldArrayIndex + 1) * sizeof(FIT_UINT32)); + } + + for (size_t i = 0; i < sizeof(FIT_UINT32); i++) + { + values[(fieldArrayIndex * sizeof(FIT_UINT32)) + i] = ((FIT_BYTE)(value >> (8 * i))); + } +} + +void FieldBase::SetUINT32ZValue(const FIT_UINT32Z value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT32Value(value, fieldArrayIndex); +} + +void FieldBase::SetSINT64Value(const FIT_SINT64 value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT64Value(value, fieldArrayIndex); +} + +void FieldBase::SetUINT64Value(const FIT_UINT64 value, const FIT_UINT8 fieldArrayIndex) +{ + if ((FIT_UINT8)values.size() < ((fieldArrayIndex + 1) * sizeof(FIT_UINT64))) + { + values.resize((fieldArrayIndex + 1) * sizeof(FIT_UINT64)); + } + + for (size_t i = 0; i < sizeof(FIT_UINT64); i++) + { + values[(fieldArrayIndex * sizeof(FIT_UINT64)) + i] = ((FIT_BYTE)(value >> (8 * i))); + } +} + +void FieldBase::SetUINT64ZValue(const FIT_UINT64Z value, const FIT_UINT8 fieldArrayIndex) +{ + SetUINT64Value(value, fieldArrayIndex); +} + +void FieldBase::SetFLOAT32Value(const FIT_FLOAT32 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + SetFLOAT64Value(value, fieldArrayIndex, subFieldIndex); +} + +void FieldBase::SetFLOAT64Value(const FIT_FLOAT64 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!IsValid()) + return; + + FIT_FLOAT64 recalculatedValue = (value + GetOffset(subFieldIndex)) * GetScale(subFieldIndex); + // Make sure floating point representations trunc to the expected integer + FIT_FLOAT64 roundedValue = (recalculatedValue >= 0.0) ? (recalculatedValue + 0.5) : (recalculatedValue - 0.5); + + switch (GetType()) { // Note: This checks the type of the MAIN field since data is aligned according to that type + case FIT_BASE_TYPE_BYTE: + case FIT_BASE_TYPE_ENUM: + case FIT_BASE_TYPE_SINT8: + case FIT_BASE_TYPE_UINT8: + case FIT_BASE_TYPE_UINT8Z: + SetUINT8Value((FIT_UINT8) roundedValue, fieldArrayIndex); + break; + + case FIT_BASE_TYPE_SINT16: + case FIT_BASE_TYPE_UINT16: + case FIT_BASE_TYPE_UINT16Z: + SetUINT16Value((FIT_UINT16) roundedValue, fieldArrayIndex); + break; + + case FIT_BASE_TYPE_SINT32: + case FIT_BASE_TYPE_UINT32: + case FIT_BASE_TYPE_UINT32Z: + SetUINT32Value((FIT_UINT32) roundedValue, fieldArrayIndex); + break; + + case FIT_BASE_TYPE_SINT64: + case FIT_BASE_TYPE_UINT64: + case FIT_BASE_TYPE_UINT64Z: + SetUINT64Value((FIT_UINT64) roundedValue, fieldArrayIndex); + break; + + case FIT_BASE_TYPE_FLOAT32: + { + FIT_FLOAT32 float32Value = (FIT_FLOAT32)recalculatedValue; + FIT_UINT32 uint32Value; + memcpy(&uint32Value, &float32Value, sizeof(FIT_FLOAT32)); + SetUINT32Value(uint32Value, fieldArrayIndex); + break; + } + + case FIT_BASE_TYPE_FLOAT64: + if ((FIT_UINT8)values.size() < ((fieldArrayIndex + 1) * sizeof(FIT_FLOAT64))) + { + values.resize((fieldArrayIndex + 1) * sizeof(FIT_FLOAT64)); + } + + for (size_t i = 0; i < sizeof(FIT_FLOAT64); i++) + { + values[(fieldArrayIndex * sizeof(FIT_FLOAT64)) + i] = *(((FIT_BYTE *)&recalculatedValue) + i); + } + + break; + + default: + break; + } +} + +void FieldBase::SetSTRINGValue(const FIT_WSTRING& value, const FIT_UINT8 fieldArrayIndex) +{ + if (!IsValid()) + return; + + Unicode::UTF8_STRING stringValue = Unicode::Encode_BaseToUTF8(value); + FIT_UINT8 stringLength = (FIT_UINT8)stringValue.length(); + FIT_UINT8 idx = 0; + FIT_UINT8 nextIdx = 0; + FIT_UINT8 numStrings = (FIT_UINT8)stringIndexes.size(); + FIT_UINT8 dif = 0; + + if ( fieldArrayIndex < numStrings ) + { + idx = stringIndexes[fieldArrayIndex]; + if (fieldArrayIndex + 1 < numStrings) + { + nextIdx = stringIndexes[fieldArrayIndex + 1]; + dif = (FIT_UINT8)( (value.length() + 1) - (nextIdx - idx) ); + values.erase(values.begin() + idx, values.begin() + nextIdx); + } + else + { + values.erase(values.begin() + idx, values.end()); + } + + for (auto i = 0; i < stringLength + 1; i++) + values.insert(values.begin() + idx + i, 0); + } + else + { + idx = (FIT_UINT8)values.size(); + numStrings++; + stringIndexes.push_back(idx); + for (auto j = 0; j < stringLength + 1; j++) + { + values.push_back(0); + } + } + + int i; + for (i = 0; i < (int)stringValue.length(); i++) + { + values[idx + i] = static_cast(stringValue[i]); + } + + values[idx + i] = 0; // null terminate +} + +FIT_BOOL FieldBase::Read(const void *data, const FIT_UINT8 size) +{ + FIT_UINT8 bytesLeft = size; + FIT_UINT8 typeSize = baseTypeSizes[GetType() & FIT_BASE_TYPE_NUM_MASK]; + FIT_BYTE *byteData = (FIT_BYTE *) data; + + values.clear(); + + switch (GetType()) + { + case FIT_BASE_TYPE_STRING: + { + FIT_BOOL hasData = FIT_FALSE; + FIT_UINT8 stringPos = 0; + FIT_UINT8 index = 0; + + // Check if the string is empty + while (index < bytesLeft) + { + if (byteData[index] != 0) + { + hasData = FIT_TRUE; + break; + } + index++; + } + + if (!hasData) + break; + + stringIndexes.push_back(stringPos); + + while (bytesLeft-- > 0) + { + FIT_BYTE byte = *byteData++; + values.push_back(byte); + stringPos++; + + if ( ( byte == 0 ) && ( stringPos + 1 < size ) ) + { + stringIndexes.push_back(stringPos); + } + } + + // Null terminate if not already null terminated + if ( values.back() != 0 ) + { + values.push_back(0); + } + } + break; + + default: + { + int bytes = bytesLeft; + FIT_BYTE *point = byteData; + + while (bytes > 0) + { + if (memcmp(point, baseTypeInvalids[GetType() & FIT_BASE_TYPE_NUM_MASK], typeSize) != 0) + { + values.insert(values.end(), byteData, byteData + bytesLeft); + break; + } + point += typeSize; + bytes -= typeSize; + } + } + break; + } + + return FIT_TRUE; +} + +FIT_UINT8 FieldBase::Write(std::ostream &file) const +{ + file.write((const char*)values.data(), values.size()); + + return GetSize(); +} + +FIT_BOOL FieldBase::IsValueValid( const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subfieldIndex ) const +{ + FIT_BOOL isValid = FIT_FALSE; + + FIT_UINT8 type = GetType( subfieldIndex ); + + if ( FIT_UINT8_INVALID == type ) + { + // Invalid Subfield Index use the default type + type = GetType(); + } + + if ( FIT_BASE_TYPE_STRING == type ) + { + FIT_WSTRING strVal = GetSTRINGValue( fieldArrayIndex ); + + isValid = ( strVal != FIT_WSTRING_INVALID ); + } + else + { + FIT_UINT8 baseTypeSize = baseTypeSizes[type & FIT_BASE_TYPE_NUM_MASK]; + const FIT_UINT8* invalid = baseTypeInvalids[type & FIT_BASE_TYPE_NUM_MASK]; + FIT_UINT8* data = new FIT_UINT8[baseTypeSize]; + + FIT_BOOL readSuccess = GetMemoryValue( fieldArrayIndex, data, baseTypeSize ); + + //! TODO Handle Strings + if ( readSuccess ) + { + isValid = ( memcmp( invalid, data, baseTypeSize ) != 0 ); + } + delete[] data; + } + + return isValid; +} + +FIT_FLOAT64 FieldBase::Round(FIT_FLOAT64 value) +{ + return (value > 0.0) ? floor(value + 0.5) : ceil(value - 0.5); +} + +template +T FieldBase::GetValue(const FIT_UINT8 fieldArrayIndex) const +{ + FIT_UINT8 size = baseTypeSizes[GetType() & FIT_BASE_TYPE_NUM_MASK]; + if (fieldArrayIndex >= (FIT_UINT8)values.size()) + { + return *reinterpret_cast(baseTypeInvalids[GetType() & FIT_BASE_TYPE_NUM_MASK]); + } + + T rv = 0; + + for (int i = 0; i < size; i++) + { + rv |= static_cast(values[(fieldArrayIndex * size) + i]) << (i * 8); + } + + return rv; +} + + +template +TTo FieldBase::ConvertBaseType(const FIT_UINT8 fieldArrayIndex, const FIT_UINT8 toBaseType) const +{ + FIT_CONST_UINT8_PTR invalid = baseTypeInvalids[GetType() & FIT_BASE_TYPE_NUM_MASK]; + TFrom value = GetValue(fieldArrayIndex); + + if (memcmp(&value, invalid, sizeof(TFrom)) == 0) + return *reinterpret_cast(baseTypeInvalids[toBaseType & FIT_BASE_TYPE_NUM_MASK]); + + return static_cast(value); +} +} // namespace fit diff --git a/Sources/cppfit/fit_field_definition.cpp b/Sources/cppfit/fit_field_definition.cpp new file mode 100644 index 0000000..74f2d5b --- /dev/null +++ b/Sources/cppfit/fit_field_definition.cpp @@ -0,0 +1,103 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include +#include "fit_field_definition.hpp" + +namespace fit +{ + +FieldDefinition::FieldDefinition() + : num(FIT_FIELD_NUM_INVALID), size(0), type(FIT_UINT8_INVALID) +{ +} + +FieldDefinition::FieldDefinition(const Field& field) + : num(field.GetNum()), size(field.GetSize()), type(field.GetType()) +{ +} + +FieldDefinition::FieldDefinition(const Field* field) +{ + if (field != FIT_NULL) + { + num = field->GetNum(); + size = field->GetSize(); + type = field->GetType(); + } + else + { + num = FIT_FIELD_NUM_INVALID; + size = 0; + type = FIT_UINT8_INVALID; + } +} + +FIT_UINT8 FieldDefinition::GetNum() const +{ + return num; +} + +FIT_UINT8 FieldDefinition::GetSize() const +{ + return size; +} + +FIT_UINT8 FieldDefinition::GetType() const +{ + return type; +} + +void FieldDefinition::SetNum(const FIT_UINT8 newNum) +{ + num = newNum; +} + +void FieldDefinition::SetSize(const FIT_UINT8 newSize) +{ + size = newSize; +} + +void FieldDefinition::SetType(const FIT_UINT8 newType) +{ + type = newType; +} + +FIT_BOOL FieldDefinition::operator==(const FieldDefinition& field) const +{ + if (num != field.num) + return FIT_FALSE; + + if (size != field.size) + return FIT_FALSE; + + if (type != field.type) + return FIT_FALSE; + + return FIT_TRUE; +} + +FIT_BOOL FieldDefinition::operator!=(const FieldDefinition& field) const +{ + return !(*this==field); +} + +FIT_UINT8 FieldDefinition::Write(std::ostream &file) const +{ + file.put(num); + file.put(size); + file.put(type); + + return 3; +} + +} // namespace fit diff --git a/Sources/cppfit/fit_mesg.cpp b/Sources/cppfit/fit_mesg.cpp new file mode 100644 index 0000000..a11c3ca --- /dev/null +++ b/Sources/cppfit/fit_mesg.cpp @@ -0,0 +1,916 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include +#include +#include "fit_mesg.hpp" +#include "fit_mesg_definition.hpp" + +namespace fit +{ + +Mesg::Mesg() + : profile(FIT_NULL) + , localNum(0) + , fields() + , devFields() +{ +} + +Mesg::Mesg(const Mesg &mesg) + : profile(mesg.profile) + , localNum(mesg.localNum) + , fields(mesg.fields) + , devFields(mesg.devFields) +{ +} + +Mesg::Mesg(const Profile::MESG_INDEX index) + : profile(&Profile::mesgs[index]) + , localNum(0) + , fields() + , devFields() +{ +} + +Mesg::Mesg(const std::string& name) + : profile(Profile::GetMesg(name)) + , localNum(0) + , fields() + , devFields() +{ +} + +Mesg::Mesg(const FIT_UINT16 num) + : profile(Profile::GetMesg(num)) + , localNum(0) + , fields() + , devFields() +{ +} + +FIT_BOOL Mesg::IsValid(void) const +{ + return (profile != FIT_NULL); +} + +FIT_BOOL Mesg::GetIsFieldAccumulated(const FIT_UINT8 num) const +{ + const Field *field = this->GetField(num); + if (field != FIT_NULL) + { + return field->GetIsAccumulated(); + } + return FIT_FALSE; +} + +const DeveloperField* Mesg::GetDeveloperField(FIT_UINT8 developerDataIndex, FIT_UINT8 num) const +{ + for (int i = 0; i < (int)devFields.size(); i++) + { + const DeveloperFieldDefinition& def = devFields[i].GetDefinition(); + if ((def.GetNum() == num) && + (def.GetDeveloperDataIndex() == developerDataIndex)) + { + return &devFields[i]; + } + } + + return FIT_NULL; +} + +int Mesg::Write(std::ostream& file, const MesgDefinition* mesgDef) const +{ + MesgDefinition mesgDefOnNull; + int mesgSize = 1; + int fieldSize = 0; + + file.put((localNum & FIT_HDR_TYPE_MASK)); // Message record header with local message number. + + if (mesgDef == FIT_NULL) + { + mesgDefOnNull = MesgDefinition(*this); + mesgDef = &mesgDefOnNull; + } + + for (FIT_UINT16 fieldDefIndex = 0; fieldDefIndex < (mesgDef->GetFields().size()); fieldDefIndex++) + { + const Field* field = GetField(mesgDef->GetFieldByIndex(fieldDefIndex)->GetNum()); + const FieldDefinition* definition = mesgDef->GetFieldByIndex(fieldDefIndex); + + fieldSize = WriteField(file, field, definition->GetSize(), definition->GetType()); + if (fieldSize == 0) + { + // Something went wrong during our write + return 0; + } + + mesgSize += fieldSize; + } + + for (DeveloperFieldDefinition def : mesgDef->GetDevFields()) + { + const DeveloperField* field = GetDeveloperField(def.GetDeveloperDataIndex(), def.GetNum()); + + fieldSize = WriteField(file, field, def.GetSize(), def.GetType()); + if (fieldSize == 0) + { + // Something went wrong during our write + return 0; + } + + mesgSize += fieldSize; + } + + return mesgSize; +} + +std::string Mesg::GetName() const +{ + if (profile == FIT_NULL) + return "unknown"; + + return profile->name; +} + +FIT_UINT16 Mesg::GetNum() const +{ + if (profile == FIT_NULL) + return FIT_MESG_NUM_INVALID; + + return profile->num; +} + +FIT_UINT8 Mesg::GetLocalNum() const +{ + return localNum; +} + +void Mesg::SetLocalNum(const FIT_UINT8 newLocalNum) +{ + if (newLocalNum < FIT_MAX_LOCAL_MESGS) + localNum = newLocalNum; +} + +FIT_BOOL Mesg::HasField(const int fieldNum) const +{ + for (int i = 0; i < (int)fields.size(); i++) + { + if (fields[i].GetNum() == fieldNum) + return FIT_TRUE; + } + + return FIT_FALSE; +} + +void Mesg::AddField(const Field& field) +{ + Field *existingField = GetField(field.GetNum()); + + if (existingField == FIT_NULL) + fields.push_back(field); +} + +Field* Mesg::AddField(const FIT_UINT8 fieldNum) +{ + Field *field = GetField(fieldNum); + + if (field == FIT_NULL) + { + fields.push_back(Field(profile->num, fieldNum)); + field = &fields[fields.size() - 1]; + } + + return field; +} + +void Mesg::AddDeveloperField(const DeveloperField& field) +{ + for (FIT_UINT16 i = 0; i < devFields.size(); ++i) + { + if (devFields[i].GetDefinition() == field.GetDefinition()) + { + devFields[i] = field; + return; + } + } + + devFields.push_back(field); +} + +void Mesg::SetField(const Field& field) +{ + for (int i = 0; i < (int)fields.size(); i++) + { + if (fields[i].GetNum() == field.GetNum()) + { + fields[i] = field; + return; + } + } + + fields.push_back(field); +} + +void Mesg::SetFields(const Mesg& mesg) +{ + if (mesg.GetNum() != GetNum()) + return; + + for (int i=0; i < (int)mesg.fields.size(); i++) + SetField(mesg.fields[i]); +} + +int Mesg::GetNumFields() const +{ + return (int)fields.size(); +} + +int Mesg::GetNumDevFields() const +{ + return (int)devFields.size(); +} + +Field* Mesg::GetFieldByIndex(const FIT_UINT16 index) +{ + if (index < fields.size()) + return &fields[index]; + + return FIT_NULL; +} + +Field* Mesg::GetField(const FIT_UINT8 fieldNum) +{ + for (int i = 0; i < (int)fields.size(); i++) + { + if (fields[i].GetNum() == fieldNum) + return &fields[i]; + } + + return FIT_NULL; +} + +Field* Mesg::GetField(const std::string& name) +{ + for (FIT_UINT16 i = 0; i < (FIT_UINT16)fields.size(); i++) + { + if (fields[i].GetName().compare(name) == 0) + return &fields[i]; + + for (FIT_UINT16 j = 0; j < fields[i].GetNumSubFields(); j++) + { + if ((fields[i].GetName(j).compare(name) == 0) && CanSupportSubField(&(fields[i]),j)) + return &fields[i]; + } + } + + return FIT_NULL; +} + +const Field* Mesg::GetFieldByIndex(const FIT_UINT16 index) const +{ + if (index < fields.size()) + return &fields[index]; + + return FIT_NULL; +} + +const Field* Mesg::GetField(const FIT_UINT8 fieldNum) const +{ + for (int i = 0; i < (int)fields.size(); i++) + { + if (fields[i].GetNum() == fieldNum) + return &fields[i]; + } + + return FIT_NULL; +} + +const Field* Mesg::GetField(const std::string& name) const +{ + for (FIT_UINT16 i = 0; i < (FIT_UINT16)fields.size(); i++) + { + if (fields[i].GetName().compare(name) == 0) + return &fields[i]; + + for (FIT_UINT16 j = 0; j < fields[i].GetNumSubFields(); j++) + { + if ((fields[i].GetName(j).compare(name) == 0) && CanSupportSubField(&(fields[i]),j)) + return &fields[i]; + } + } + + return FIT_NULL; +} + +const std::vector& Mesg::GetDeveloperFields() const +{ + return devFields; +} + +FIT_BOOL Mesg::CanSupportSubField(const FIT_UINT8 fieldNum, const FIT_UINT16 subFieldIndex) const +{ + if ((subFieldIndex == FIT_SUBFIELD_INDEX_MAIN_FIELD) || (subFieldIndex == FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD)) + return FIT_TRUE; + + const Profile::SUBFIELD* subField = Profile::GetSubField(GetNum(), fieldNum, subFieldIndex); + + if (subField == FIT_NULL) + return FIT_FALSE; + + for (int i = 0; i < (int) subField->numMaps; i++) + { + const Field* refField = GetField(subField->maps[i].refFieldNum); + + if (refField != FIT_NULL) + { + FIT_FLOAT64 refValue = refField->GetFLOAT64Value(0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + refValue += ((refValue >= 0.0) ? (0.5) : (-0.5)); + if ((FIT_SINT32)refValue == subField->maps[i].refFieldValue) + return FIT_TRUE; + } + } + + return FIT_FALSE; +} + +FIT_BOOL Mesg::CanSupportSubField(const Field* field, const FIT_UINT16 subFieldIndex) const +{ + if ((subFieldIndex == FIT_SUBFIELD_INDEX_MAIN_FIELD) || (subFieldIndex == FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD)) + return FIT_TRUE; + + if (field == FIT_NULL) + return FIT_FALSE; + + const Profile::SUBFIELD* subField = field->GetSubField(subFieldIndex); + + if (subField == FIT_NULL) + return FIT_FALSE; + + for (int i = 0; i < (int) subField->numMaps; i++) + { + const Field* refField = GetField(subField->maps[i].refFieldNum); + + if (refField != FIT_NULL) + { + FIT_FLOAT64 refValue = refField->GetFLOAT64Value(0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + refValue += ((refValue >= 0.0) ? (0.5) : (-0.5)); + if ((FIT_SINT32)refValue == subField->maps[i].refFieldValue) + return FIT_TRUE; + } + } + + return FIT_FALSE; +} + +FIT_UINT16 Mesg::GetActiveSubFieldIndexByFieldIndex(const FIT_UINT16 fieldIndex) const +{ + if ((int) fieldIndex >= GetNumFields()) + return FIT_SUBFIELD_INDEX_MAIN_FIELD; + + for (FIT_UINT16 i = 0; i < fields[fieldIndex].GetNumSubFields(); i++) + { + const Profile::SUBFIELD* subField = fields[fieldIndex].GetSubField(i); + + if (subField != FIT_NULL) + { + for (int j = 0; j < (int) subField->numMaps; j++) + { + const Field* refField = GetField(subField->maps[j].refFieldNum); + + if (refField != FIT_NULL) + { + FIT_FLOAT64 refValue = refField->GetFLOAT64Value(0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + refValue += ((refValue >= 0.0) ? (0.5) : (-0.5)); + if ((FIT_SINT32)refValue == subField->maps[j].refFieldValue) + return ((FIT_UINT16) i); + } + } + } + } + + return FIT_SUBFIELD_INDEX_MAIN_FIELD; +} + +FIT_UINT16 Mesg::GetActiveSubFieldIndex(const FIT_UINT8 fieldNum) const +{ + const Profile::FIELD* field = Profile::GetField(GetNum(), fieldNum); + + if (field == FIT_NULL) + return FIT_SUBFIELD_INDEX_MAIN_FIELD; + + for (int i = 0; i < (int) field->numSubFields; i++) + { + const Profile::SUBFIELD& subField = field->subFields[i]; + + for (int j = 0; j < (int) subField.numMaps; j++) + { + const Field* refField = GetField(subField.maps[j].refFieldNum); + + if (refField != FIT_NULL) + { + FIT_FLOAT64 refValue = refField->GetFLOAT64Value(0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + refValue += ((refValue >= 0.0) ? (0.5) : (-0.5)); + if ((FIT_SINT32)refValue == subField.maps[j].refFieldValue) + return ((FIT_UINT16) i); + } + } + } + + return FIT_SUBFIELD_INDEX_MAIN_FIELD; +} + +FIT_UINT8 Mesg::GetFieldNumValues(const FIT_UINT8 fieldNum, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return 0; + + return field->GetNumValues(); +} + +FIT_ENUM Mesg::GetFieldENUMValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_ENUM_INVALID; + + return field->GetENUMValue(fieldArrayIndex); +} + +FIT_BYTE Mesg::GetFieldBYTEValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_BYTE_INVALID; + + return field->GetBYTEValue(fieldArrayIndex); +} + +FIT_SINT8 Mesg::GetFieldSINT8Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_SINT8_INVALID; + + return field->GetSINT8Value(fieldArrayIndex); +} + +FIT_UINT8 Mesg::GetFieldUINT8Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT8_INVALID; + + return field->GetUINT8Value(fieldArrayIndex); +} + +FIT_UINT8Z Mesg::GetFieldUINT8ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT8Z_INVALID; + + return field->GetUINT8ZValue(fieldArrayIndex); +} + +FIT_SINT16 Mesg::GetFieldSINT16Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_SINT16_INVALID; + + return field->GetSINT16Value(fieldArrayIndex); +} + +FIT_UINT16 Mesg::GetFieldUINT16Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT16_INVALID; + + return field->GetUINT16Value(fieldArrayIndex); +} + +FIT_UINT16Z Mesg::GetFieldUINT16ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT16Z_INVALID; + + return field->GetUINT16ZValue(fieldArrayIndex); +} + +FIT_SINT32 Mesg::GetFieldSINT32Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_SINT32_INVALID; + + return field->GetSINT32Value(fieldArrayIndex); +} + +FIT_UINT32 Mesg::GetFieldUINT32Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT32_INVALID; + + return field->GetUINT32Value(fieldArrayIndex); +} + +FIT_UINT32Z Mesg::GetFieldUINT32ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT32Z_INVALID; + + return field->GetUINT32ZValue(fieldArrayIndex); +} + +FIT_SINT64 Mesg::GetFieldSINT64Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_SINT64_INVALID; + + return field->GetSINT64Value(fieldArrayIndex); +} + +FIT_UINT64 Mesg::GetFieldUINT64Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT64_INVALID; + + return field->GetUINT64Value(fieldArrayIndex); +} + +FIT_UINT64Z Mesg::GetFieldUINT64ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_UINT64Z_INVALID; + + return field->GetUINT64ZValue(fieldArrayIndex); +} + +FIT_FLOAT32 Mesg::GetFieldFLOAT32Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_FLOAT32_INVALID; + + if (subFieldIndex == FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) + return field->GetFLOAT32Value(fieldArrayIndex, GetActiveSubFieldIndex(fieldNum)); + else + return field->GetFLOAT32Value(fieldArrayIndex, subFieldIndex); +} + +FIT_FLOAT64 Mesg::GetFieldFLOAT64Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_FLOAT64_INVALID; + + if (subFieldIndex == FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) + return field->GetFLOAT64Value(fieldArrayIndex, GetActiveSubFieldIndex(fieldNum)); + else + return field->GetFLOAT64Value(fieldArrayIndex, subFieldIndex); +} + +FIT_WSTRING Mesg::GetFieldSTRINGValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) const +{ + const Field *field = GetField(fieldNum); + + if ((field == FIT_NULL) || (!CanSupportSubField(fieldNum, subFieldIndex))) + return FIT_WSTRING_INVALID; + + if (subFieldIndex == FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) + return field->GetSTRINGValue(fieldArrayIndex, GetActiveSubFieldIndex(fieldNum)); + else + return field->GetSTRINGValue(fieldArrayIndex, subFieldIndex); +} + +void Mesg::SetFieldENUMValue(const FIT_UINT8 fieldNum, const FIT_ENUM value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetENUMValue(value, fieldArrayIndex); +} + +void Mesg::SetFieldBYTEValue(const FIT_UINT8 fieldNum, const FIT_BYTE value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetBYTEValue(value, fieldArrayIndex); +} + +void Mesg::SetFieldSINT8Value(const FIT_UINT8 fieldNum, const FIT_SINT8 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetSINT8Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT8Value(const FIT_UINT8 fieldNum, const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT8Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT8ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT8ZValue(value, fieldArrayIndex); +} + +void Mesg::SetFieldSINT16Value(const FIT_UINT8 fieldNum, const FIT_SINT16 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetSINT16Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT16Value(const FIT_UINT8 fieldNum, const FIT_UINT16 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT16Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT16ZValue(const FIT_UINT8 fieldNum, const FIT_UINT16Z value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT16ZValue(value, fieldArrayIndex); +} + +void Mesg::SetFieldSINT32Value(const FIT_UINT8 fieldNum, const FIT_SINT32 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetSINT32Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT32Value(const FIT_UINT8 fieldNum, const FIT_UINT32 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT32Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT32ZValue(const FIT_UINT8 fieldNum, const FIT_UINT32Z value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT32ZValue(value, fieldArrayIndex); +} + +void Mesg::SetFieldSINT64Value(const FIT_UINT8 fieldNum, const FIT_SINT64 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetSINT64Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT64Value(const FIT_UINT8 fieldNum, const FIT_UINT64 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT64Value(value, fieldArrayIndex); +} + +void Mesg::SetFieldUINT64ZValue(const FIT_UINT8 fieldNum, const FIT_UINT64Z value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetUINT64ZValue(value, fieldArrayIndex); +} + +void Mesg::SetFieldFLOAT32Value(const FIT_UINT8 fieldNum, const FIT_FLOAT32 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + if (subFieldIndex == FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) + return field->SetFLOAT32Value(value, fieldArrayIndex, GetActiveSubFieldIndex(fieldNum)); + else + return field->SetFLOAT32Value(value, fieldArrayIndex, subFieldIndex); +} + +void Mesg::SetFieldFLOAT64Value(const FIT_UINT8 fieldNum, const FIT_FLOAT64 value, const FIT_UINT8 fieldArrayIndex, const FIT_UINT16 subFieldIndex) +{ + if (!CanSupportSubField(fieldNum, subFieldIndex)) + return; + + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + if (subFieldIndex == FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) + return field->SetFLOAT64Value(value, fieldArrayIndex, GetActiveSubFieldIndex(fieldNum)); + else + return field->SetFLOAT64Value(value, fieldArrayIndex, subFieldIndex); +} + +void Mesg::SetFieldSTRINGValue(const FIT_UINT8 fieldNum, const FIT_WSTRING& value, const FIT_UINT8 fieldArrayIndex) +{ + Field *field = AddField(fieldNum); + + if (field == FIT_NULL) + return; + + return field->SetSTRINGValue(value, fieldArrayIndex); +} + +std::vector Mesg::GetOverrideFields(const FIT_UINT8 fieldNum) const +{ + std::vector vector; + + const FieldBase* nativeField = GetField(fieldNum); + + if (FIT_NULL != nativeField) + { + vector.emplace_back(nativeField); + } + + for (FIT_UINT32 i = 0; i < devFields.size(); i++) + { + const DeveloperField& devField = devFields[i]; + if (devField.GetNativeOverride() == fieldNum) + { + vector.emplace_back(&devField); + } + } + + return vector; +} + +void Mesg::RemoveExpandedFields(void) +{ + fields.erase(std::remove_if(fields.begin(), + fields.end(), + [](Field& field){return field.GetIsExpanded();}), + fields.end()); +} + +int Mesg::WriteField(std::ostream& file, const FieldBase* field, FIT_UINT8 defSize, FIT_UINT8 defType) +{ + FIT_UINT8 fieldSize = 0; + + if (field != FIT_NULL) + { + fieldSize = field->Write(file); + + if (fieldSize == 0) + return 0; + } + + if (fieldSize < defSize) + { + FIT_UINT8 baseTypeNum = (defType & FIT_BASE_TYPE_NUM_MASK); + + if (baseTypeNum < FIT_BASE_TYPES) + { + FIT_UINT8 baseTypeByteIndex = (fieldSize % (baseTypeSizes[baseTypeNum])); + FIT_UINT8 numBytesRemaining = (defSize) - fieldSize; + + while (numBytesRemaining--) + { + file.put(*(baseTypeInvalids[baseTypeNum] + baseTypeByteIndex)); + + if ((++baseTypeByteIndex) >= baseTypeSizes[baseTypeNum]) + baseTypeByteIndex = 0; + + fieldSize++; + } + } + else + { + return 0; + // Do not continue if base type not supported. + } + } + + return fieldSize; +} +} // namespace fit diff --git a/Sources/cppfit/fit_mesg_definition.cpp b/Sources/cppfit/fit_mesg_definition.cpp new file mode 100644 index 0000000..1050c92 --- /dev/null +++ b/Sources/cppfit/fit_mesg_definition.cpp @@ -0,0 +1,262 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include +#include "fit_mesg_definition.hpp" +#include "fit_developer_field_definition.hpp" + +namespace fit +{ + +MesgDefinition::MesgDefinition(void) + : num(FIT_MESG_NUM_INVALID) + , localNum(0) + , fields() + , devFields() +{ +} + +MesgDefinition::MesgDefinition(const Mesg& mesg) + : num(mesg.GetNum()) + , localNum(mesg.GetLocalNum()) +{ + for (FIT_UINT16 i=0; i < (FIT_UINT16)mesg.GetNumFields(); i++) + fields.push_back(FieldDefinition(mesg.GetFieldByIndex(i))); + + for ( auto field : mesg.GetDeveloperFields() ) + { + devFields.push_back( DeveloperFieldDefinition(field) ); + } +} + +FIT_UINT16 MesgDefinition::GetNum() const +{ + return num; +} + +FIT_UINT8 MesgDefinition::GetLocalNum() const +{ + return localNum; +} + +void MesgDefinition::SetNum(const FIT_UINT16 newNum) +{ + num = newNum; +} + +void MesgDefinition::SetLocalNum(const FIT_UINT8 newLocalNum) +{ + localNum = newLocalNum; +} + +void MesgDefinition::AddField(const FieldDefinition& fieldDef) +{ + fields.push_back(fieldDef); +} + +void MesgDefinition::AddDevField(const DeveloperFieldDefinition& fieldDef) +{ + devFields.push_back(fieldDef); +} + +void MesgDefinition::ClearFields() +{ + fields.clear(); + devFields.clear(); +} + +int MesgDefinition::GetNumFields() const +{ + return ((int) fields.size()); +} + +int MesgDefinition::GetNumDevFields() const +{ + return ((int) devFields.size()); +} + +std::vector& MesgDefinition::GetFields() +{ + return fields; +} + +std::vector& MesgDefinition::GetDevFields() +{ + return devFields; +} + +FieldDefinition* MesgDefinition::GetField(const FIT_UINT8 fieldNum) +{ + for (int i=0; i<(int)fields.size(); i++) + { + if (fieldNum == fields[i].GetNum()) + return &(fields[i]); + } + + return FIT_NULL; +} + +FieldDefinition* MesgDefinition::GetFieldByIndex(const FIT_UINT16 index) +{ + if (index < fields.size()) + return &(fields[index]); + + return FIT_NULL; +} + +DeveloperFieldDefinition* MesgDefinition::GetDevFieldByIndex(const FIT_UINT16 index) +{ + if (index < devFields.size()) + return &devFields[index]; + + return FIT_NULL; +} + +const std::vector& MesgDefinition::GetFields() const +{ + return fields; +} + +const std::vector& MesgDefinition::GetDevFields() const +{ + return devFields; +} + +const FieldDefinition* MesgDefinition::GetField(const FIT_UINT8 fieldNum) const +{ + for (int i=0; i<(int)fields.size(); i++) + { + if (fieldNum == fields[i].GetNum()) + return &(fields[i]); + } + + return FIT_NULL; +} + +const FieldDefinition* MesgDefinition::GetFieldByIndex(const FIT_UINT16 index) const +{ + if (index < fields.size()) + return &(fields[index]); + + return FIT_NULL; +} + +const DeveloperFieldDefinition* MesgDefinition::GetDevFieldByIndex(const FIT_UINT16 index) const +{ + if (index < devFields.size()) + return &devFields[index]; + + return FIT_NULL; +} + +FIT_BOOL MesgDefinition::operator==(const MesgDefinition& mesgDef) const +{ + if (num != mesgDef.num) + return FIT_FALSE; + + if (localNum != mesgDef.localNum) + return FIT_FALSE; + + if (fields.size() != mesgDef.fields.size()) + return FIT_FALSE; + + for (int i=0; i<(int)fields.size(); i++) + { + if (fields[i] != mesgDef.fields[i]) + return FIT_FALSE; + } + + return FIT_TRUE; +} + +FIT_BOOL MesgDefinition::operator!=(const MesgDefinition& mesgDef) const +{ + return !(*this == mesgDef); +} + +FIT_BOOL MesgDefinition::Supports(const Mesg& mesg) const +{ + return Supports(MesgDefinition(mesg)); +} + +FIT_BOOL MesgDefinition::Supports(const MesgDefinition& mesgDef) const +{ + if (num != mesgDef.num) + return FIT_FALSE; + + if (localNum != mesgDef.localNum) + return FIT_FALSE; + + for (int i=0; i<(int)mesgDef.fields.size(); i++) + { + const FieldDefinition* supportedFieldDef = GetField(mesgDef.fields[i].GetNum()); + + if (supportedFieldDef == FIT_NULL) // Could not find field with matching number. + return FIT_FALSE; + + if (mesgDef.fields[i].GetSize() > supportedFieldDef->GetSize()) // Other field definition is larger than this field definition. + return FIT_FALSE; + } + + return FIT_TRUE; +} + +int MesgDefinition::Write(std::ostream &file) const +{ + int mesgSize = 6; + + if ( devFields.size() > 0 ) + { + file.put( ( FIT_HDR_TYPE_DEF_BIT | FIT_HDR_DEV_FIELD_BIT ) | ( localNum & FIT_HDR_TYPE_MASK ) ); // Message definition record header with local message number. + } + else + { + file.put((FIT_HDR_TYPE_DEF_BIT) | (localNum & FIT_HDR_TYPE_MASK)); // Message definition record header with local message number. + } + file.put(0); // Reserved + file.put(GetArch()); + if (GetArch()) + { // Big Endian + file.put((FIT_UINT8)(num >> 8)); + file.put((FIT_UINT8)num); + } + else + { + file.put((FIT_UINT8)num); + file.put((FIT_UINT8)(num >> 8)); + } + file.put((FIT_UINT8)fields.size()); + + for (FIT_UINT8 i=0; i 0 ) + { + file.put( ( FIT_UINT8 )devFields.size() ); + mesgSize += 1; + } + for ( FIT_UINT8 i = 0; i < devFields.size(); i++ ) + { + int fieldSize = devFields[i].Write( file ); + mesgSize += fieldSize; + } + return mesgSize; +} + +} // namespace fit diff --git a/Sources/cppfit/fit_profile.cpp b/Sources/cppfit/fit_profile.cpp new file mode 100644 index 0000000..d709139 --- /dev/null +++ b/Sources/cppfit/fit_profile.cpp @@ -0,0 +1,2596 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_profile.hpp" + +namespace fit +{ + +static const Profile::SUBFIELD_MAP fileIdProductFaveroProductMaps[] = +{ + { 263, 1 }, // manufacturer == favero_electronics +}; + +static const Profile::SUBFIELD_MAP fileIdProductGarminProductMaps[] = +{ + { 1, 1 }, // manufacturer == garmin + { 15, 1 }, // manufacturer == dynastream + { 13, 1 }, // manufacturer == dynastream_oem + { 89, 1 }, // manufacturer == tacx +}; + +static const Profile::SUBFIELD fileIdProductSubFields[] = +{ + { fileIdProductFaveroProductMaps, 0, "favero_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { fileIdProductGarminProductMaps, 0, "garmin_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 4, 0, 132 }, +}; + +static const Profile::FIELD fileIdFields[] = +{ +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::File }, +{ 0, 0, "manufacturer", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Manufacturer }, +{ 0, fileIdProductSubFields, "product", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "serial_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 140, false, Profile::Type::Uint32z }, +{ 0, 0, "time_created", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::DateTime }, +{ 0, 0, "number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "product_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD fileCreatorFields[] = +{ +{ 0, 0, "software_version", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "hardware_version", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD timestampCorrelationFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "fractional_timestamp", "s", (FIT_FLOAT64)32768, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "system_timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::DateTime }, +{ 0, 0, "fractional_system_timestamp", "s", (FIT_FLOAT64)32768, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "local_timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::LocalDateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "system_timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD softwareFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "version", "", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "part_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 7, false, Profile::Type::String }, +}; + +static const Profile::SUBFIELD_MAP slaveDeviceProductFaveroProductMaps[] = +{ + { 263, 0 }, // manufacturer == favero_electronics +}; + +static const Profile::SUBFIELD_MAP slaveDeviceProductGarminProductMaps[] = +{ + { 1, 0 }, // manufacturer == garmin + { 15, 0 }, // manufacturer == dynastream + { 13, 0 }, // manufacturer == dynastream_oem + { 89, 0 }, // manufacturer == tacx +}; + +static const Profile::SUBFIELD slaveDeviceProductSubFields[] = +{ + { slaveDeviceProductFaveroProductMaps, 0, "favero_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { slaveDeviceProductGarminProductMaps, 0, "garmin_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 4, 0, 132 }, +}; + +static const Profile::FIELD slaveDeviceFields[] = +{ +{ 0, 0, "manufacturer", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Manufacturer }, +{ 0, slaveDeviceProductSubFields, "product", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 1, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD capabilitiesFields[] = +{ +{ 0, 0, "languages", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "sports", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 10, false, Profile::Type::SportBits0 }, +{ 0, 0, "workouts_supported", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 140, false, Profile::Type::WorkoutCapabilities }, +{ 0, 0, "connectivity_supported", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 23, 140, false, Profile::Type::ConnectivityCapabilities }, +}; + +static const Profile::FIELD fileCapabilitiesFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::File }, +{ 0, 0, "flags", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 10, false, Profile::Type::FileFlags }, +{ 0, 0, "directory", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 7, false, Profile::Type::String }, +{ 0, 0, "max_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_size", "bytes", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::SUBFIELD_MAP mesgCapabilitiesCountNumPerFileMaps[] = +{ + { 0, 2 }, // count_type == num_per_file +}; + +static const Profile::SUBFIELD_MAP mesgCapabilitiesCountMaxPerFileMaps[] = +{ + { 1, 2 }, // count_type == max_per_file +}; + +static const Profile::SUBFIELD_MAP mesgCapabilitiesCountMaxPerFileTypeMaps[] = +{ + { 2, 2 }, // count_type == max_per_file_type +}; + +static const Profile::SUBFIELD mesgCapabilitiesCountSubFields[] = +{ + { mesgCapabilitiesCountNumPerFileMaps, 0, "num_per_file", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { mesgCapabilitiesCountMaxPerFileMaps, 0, "max_per_file", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { mesgCapabilitiesCountMaxPerFileTypeMaps, 0, "max_per_file_type", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, +}; + +static const Profile::FIELD mesgCapabilitiesFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "file", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::File }, +{ 0, 0, "mesg_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::MesgNum }, +{ 0, 0, "count_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::MesgCount }, +{ 0, mesgCapabilitiesCountSubFields, "count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 3, 3, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD fieldCapabilitiesFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "file", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::File }, +{ 0, 0, "mesg_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::MesgNum }, +{ 0, 0, "field_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD deviceSettingsFields[] = +{ +{ 0, 0, "active_time_zone", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "utc_offset", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_offset", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_mode", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::TimeMode }, +{ 0, 0, "time_zone_offset", "hr", (FIT_FLOAT64)4, (FIT_FLOAT64)0, 0, 0, 5, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "backlight_mode", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 0, false, Profile::Type::BacklightMode }, +{ 0, 0, "activity_tracker_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 36, 0, false, Profile::Type::Bool }, +{ 0, 0, "clock_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 39, 134, false, Profile::Type::DateTime }, +{ 0, 0, "pages_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 40, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "move_alert_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 46, 0, false, Profile::Type::Bool }, +{ 0, 0, "date_mode", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 47, 0, false, Profile::Type::DateMode }, +{ 0, 0, "display_orientation", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 55, 0, false, Profile::Type::DisplayOrientation }, +{ 0, 0, "mounting_side", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 56, 0, false, Profile::Type::Side }, +{ 0, 0, "default_page", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 57, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "autosync_min_steps", "steps", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 58, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "autosync_min_time", "minutes", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 59, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "lactate_threshold_autodetect_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 80, 0, false, Profile::Type::Bool }, +{ 0, 0, "ble_auto_upload_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 86, 0, false, Profile::Type::Bool }, +{ 0, 0, "auto_sync_frequency", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 89, 0, false, Profile::Type::AutoSyncFrequency }, +{ 0, 0, "auto_activity_detect", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 90, 134, false, Profile::Type::AutoActivityDetect }, +{ 0, 0, "number_of_screens", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 94, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "smart_notification_display_orientation", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 95, 0, false, Profile::Type::DisplayOrientation }, +{ 0, 0, "tap_interface", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 134, 0, false, Profile::Type::Switch }, +{ 0, 0, "tap_sensitivity", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 174, 0, false, Profile::Type::TapSensitivity }, +}; + +static const Profile::FIELD userProfileFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "friendly_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "gender", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::Gender }, +{ 0, 0, "age", "years", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "height", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "weight", "kg", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "language", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::Language }, +{ 0, 0, "elev_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "weight_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "resting_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "default_max_running_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "default_max_biking_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "default_max_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "hr_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 0, false, Profile::Type::DisplayHeart }, +{ 0, 0, "speed_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "dist_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 14, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "power_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 16, 0, false, Profile::Type::DisplayPower }, +{ 0, 0, "activity_class", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 17, 0, false, Profile::Type::ActivityClass }, +{ 0, 0, "position_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 18, 0, false, Profile::Type::DisplayPosition }, +{ 0, 0, "temperature_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "local_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 22, 132, false, Profile::Type::UserLocalId }, +{ 0, 0, "global_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 23, 13, false, Profile::Type::Byte }, +{ 0, 0, "wake_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 28, 134, false, Profile::Type::LocaltimeIntoDay }, +{ 0, 0, "sleep_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 29, 134, false, Profile::Type::LocaltimeIntoDay }, +{ 0, 0, "height_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 30, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "user_running_step_length", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 31, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "user_walking_step_length", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 32, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "depth_setting", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 47, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "dive_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 49, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD hrmProfileFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Bool }, +{ 0, 0, "hrm_ant_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "log_hrv", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::Bool }, +{ 0, 0, "hrm_ant_id_trans_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 10, false, Profile::Type::Uint8z }, +}; + +static const Profile::FIELD sdmProfileFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Bool }, +{ 0, 0, "sdm_ant_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "sdm_cal_factor", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "odometer", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "speed_source", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::Bool }, +{ 0, 0, "sdm_ant_id_trans_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "odometer_rollover", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD bikeProfileFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::Sport }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::SubSport }, +{ 0, 0, "odometer", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "bike_spd_ant_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "bike_cad_ant_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "bike_spdcad_ant_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "bike_power_ant_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "custom_wheelsize", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 8, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "auto_wheelsize", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "bike_weight", "kg", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 10, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "power_cal_factor", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 11, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "auto_wheel_cal", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 0, false, Profile::Type::Bool }, +{ 0, 0, "auto_power_zero", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 0, false, Profile::Type::Bool }, +{ 0, 0, "id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 14, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "spd_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 15, 0, false, Profile::Type::Bool }, +{ 0, 0, "cad_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 16, 0, false, Profile::Type::Bool }, +{ 0, 0, "spdcad_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 17, 0, false, Profile::Type::Bool }, +{ 0, 0, "power_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 18, 0, false, Profile::Type::Bool }, +{ 0, 0, "crank_length", "mm", (FIT_FLOAT64)2, (FIT_FLOAT64)-110, 0, 0, 19, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 20, 0, false, Profile::Type::Bool }, +{ 0, 0, "bike_spd_ant_id_trans_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "bike_cad_ant_id_trans_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 22, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "bike_spdcad_ant_id_trans_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 23, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "bike_power_ant_id_trans_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 24, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "odometer_rollover", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 37, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "front_gear_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 38, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "front_gear", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 39, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "rear_gear_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 40, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "rear_gear", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 41, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "shimano_di2_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 44, 0, false, Profile::Type::Bool }, +}; + +static const Profile::FIELD connectivityFields[] = +{ +{ 0, 0, "bluetooth_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Bool }, +{ 0, 0, "bluetooth_le_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::Bool }, +{ 0, 0, "ant_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::Bool }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 7, false, Profile::Type::String }, +{ 0, 0, "live_tracking_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::Bool }, +{ 0, 0, "weather_conditions_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::Bool }, +{ 0, 0, "weather_alerts_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 0, false, Profile::Type::Bool }, +{ 0, 0, "auto_activity_upload_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::Bool }, +{ 0, 0, "course_download_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 0, false, Profile::Type::Bool }, +{ 0, 0, "workout_download_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 0, false, Profile::Type::Bool }, +{ 0, 0, "gps_ephemeris_download_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 0, false, Profile::Type::Bool }, +{ 0, 0, "incident_detection_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 0, false, Profile::Type::Bool }, +{ 0, 0, "grouptrack_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 0, false, Profile::Type::Bool }, +}; + +static const Profile::SUBFIELD_MAP watchfaceSettingsLayoutDigitalLayoutMaps[] = +{ + { 0, 0 }, // mode == digital +}; + +static const Profile::SUBFIELD_MAP watchfaceSettingsLayoutAnalogLayoutMaps[] = +{ + { 1, 0 }, // mode == analog +}; + +static const Profile::SUBFIELD watchfaceSettingsLayoutSubFields[] = +{ + { watchfaceSettingsLayoutDigitalLayoutMaps, 0, "digital_layout", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 0 }, + { watchfaceSettingsLayoutAnalogLayoutMaps, 0, "analog_layout", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 0 }, +}; + +static const Profile::FIELD watchfaceSettingsFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "mode", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::WatchfaceMode }, +{ 0, watchfaceSettingsLayoutSubFields, "layout", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 1, 13, false, Profile::Type::Byte }, +}; + +static const Profile::FIELD ohrSettingsFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Switch }, +}; + +static const Profile::FIELD zonesTargetFields[] = +{ +{ 0, 0, "max_heart_rate", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "threshold_heart_rate", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "functional_threshold_power", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "hr_calc_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::HrZoneCalc }, +{ 0, 0, "pwr_calc_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::PwrZoneCalc }, +}; + +static const Profile::FIELD sportFields[] = +{ +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Sport }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::SubSport }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD hrZoneFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "high_bpm", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD speedZoneFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "high_value", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD cadenceZoneFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "high_value", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD powerZoneFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "high_value", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD metZoneFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "high_bpm", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "calories", "kcal / min", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "fat_calories", "kcal / min", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::SUBFIELD_MAP diveSettingsHeartRateSourceHeartRateAntplusDeviceTypeMaps[] = +{ + { 1, 19 }, // heart_rate_source_type == antplus +}; + +static const Profile::SUBFIELD_MAP diveSettingsHeartRateSourceHeartRateLocalDeviceTypeMaps[] = +{ + { 5, 19 }, // heart_rate_source_type == local +}; + +static const Profile::SUBFIELD diveSettingsHeartRateSourceSubFields[] = +{ + { diveSettingsHeartRateSourceHeartRateAntplusDeviceTypeMaps, 0, "heart_rate_antplus_device_type", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, + { diveSettingsHeartRateSourceHeartRateLocalDeviceTypeMaps, 0, "heart_rate_local_device_type", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, +}; + +static const Profile::FIELD diveSettingsFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "model", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::TissueModelType }, +{ 0, 0, "gf_low", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "gf_high", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "water_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::WaterType }, +{ 0, 0, "water_density", "kg/m^3", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 136, false, Profile::Type::Float32 }, +{ 0, 0, "po2_warn", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "po2_critical", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 7, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "po2_deco", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 8, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "safety_stop_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 0, false, Profile::Type::Bool }, +{ 0, 0, "bottom_depth", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 136, false, Profile::Type::Float32 }, +{ 0, 0, "bottom_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "apnea_countdown_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 0, false, Profile::Type::Bool }, +{ 0, 0, "apnea_countdown_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "backlight_mode", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 14, 0, false, Profile::Type::DiveBacklightMode }, +{ 0, 0, "backlight_brightness", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 15, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "backlight_timeout", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 16, 2, false, Profile::Type::BacklightTimeout }, +{ 0, 0, "repeat_dive_interval", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 17, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "safety_stop_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 18, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "heart_rate_source_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 0, false, Profile::Type::SourceType }, +{ 0, diveSettingsHeartRateSourceSubFields, "heart_rate_source", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 20, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD diveAlarmFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "depth", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 0, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::Bool }, +{ 0, 0, "alarm_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::DiveAlarmType }, +{ 0, 0, "sound", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::Tone }, +{ 0, 0, "dive_types", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::SubSport }, +}; + +static const Profile::FIELD diveGasFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "helium_content", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "oxygen_content", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "status", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::DiveGasStatus }, +}; + +static const Profile::FIELD goalFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Sport }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::SubSport }, +{ 0, 0, "start_date", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::DateTime }, +{ 0, 0, "end_date", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::DateTime }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::Goal }, +{ 0, 0, "value", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "repeat", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 0, false, Profile::Type::Bool }, +{ 0, 0, "target_value", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "recurrence", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 0, false, Profile::Type::GoalRecurrence }, +{ 0, 0, "recurrence_value", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 0, false, Profile::Type::Bool }, +{ 0, 0, "source", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 0, false, Profile::Type::GoalSource }, +}; + +static const Profile::FIELD activityFields[] = +{ +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "total_timer_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 0, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "num_sessions", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::Activity }, +{ 0, 0, "event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::Event }, +{ 0, 0, "event_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::EventType }, +{ 0, 0, "local_timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 134, false, Profile::Type::LocalDateTime }, +{ 0, 0, "event_group", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD_COMPONENT sessionAvgSpeedComponents[] = +{ + { (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 124, 16, FIT_FALSE }, // enhanced_avg_speed +}; + +static const Profile::FIELD_COMPONENT sessionMaxSpeedComponents[] = +{ + { (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 125, 16, FIT_FALSE }, // enhanced_max_speed +}; + +static const Profile::FIELD_COMPONENT sessionAvgAltitudeComponents[] = +{ + { (FIT_FLOAT64)5, (FIT_FLOAT64)500, 126, 16, FIT_FALSE }, // enhanced_avg_altitude +}; + +static const Profile::FIELD_COMPONENT sessionMaxAltitudeComponents[] = +{ + { (FIT_FLOAT64)5, (FIT_FLOAT64)500, 128, 16, FIT_FALSE }, // enhanced_max_altitude +}; + +static const Profile::FIELD_COMPONENT sessionMinAltitudeComponents[] = +{ + { (FIT_FLOAT64)5, (FIT_FLOAT64)500, 127, 16, FIT_FALSE }, // enhanced_min_altitude +}; + +static const Profile::SUBFIELD_MAP sessionTotalCyclesTotalStridesMaps[] = +{ + { 1, 5 }, // sport == running + { 11, 5 }, // sport == walking +}; + +static const Profile::SUBFIELD_MAP sessionTotalCyclesTotalStrokesMaps[] = +{ + { 2, 5 }, // sport == cycling + { 5, 5 }, // sport == swimming + { 15, 5 }, // sport == rowing + { 37, 5 }, // sport == stand_up_paddleboarding +}; + +static const Profile::SUBFIELD_MAP sessionAvgCadenceAvgRunningCadenceMaps[] = +{ + { 1, 5 }, // sport == running +}; + +static const Profile::SUBFIELD_MAP sessionMaxCadenceMaxRunningCadenceMaps[] = +{ + { 1, 5 }, // sport == running +}; + +static const Profile::SUBFIELD sessionTotalCyclesSubFields[] = +{ + { sessionTotalCyclesTotalStridesMaps, 0, "total_strides", "strides", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 0, 134 }, + { sessionTotalCyclesTotalStrokesMaps, 0, "total_strokes", "strokes", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 4, 0, 134 }, +}; + +static const Profile::SUBFIELD sessionAvgCadenceSubFields[] = +{ + { sessionAvgCadenceAvgRunningCadenceMaps, 0, "avg_running_cadence", "strides/min", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, +}; + +static const Profile::SUBFIELD sessionMaxCadenceSubFields[] = +{ + { sessionMaxCadenceMaxRunningCadenceMaps, 0, "max_running_cadence", "strides/min", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, +}; + +static const Profile::FIELD sessionFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Event }, +{ 0, 0, "event_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::EventType }, +{ 0, 0, "start_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::DateTime }, +{ 0, 0, "start_position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "start_position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::Sport }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 0, false, Profile::Type::SubSport }, +{ 0, 0, "total_elapsed_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 7, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_timer_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 8, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 9, 134, false, Profile::Type::Uint32 }, +{ 0, sessionTotalCyclesSubFields, "total_cycles", "cycles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 10, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_fat_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 132, false, Profile::Type::Uint16 }, +{ sessionAvgSpeedComponents, 0, "avg_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 1, 0, 14, 132, false, Profile::Type::Uint16 }, +{ sessionMaxSpeedComponents, 0, "max_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 1, 0, 15, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 16, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 17, 2, false, Profile::Type::Uint8 }, +{ 0, sessionAvgCadenceSubFields, "avg_cadence", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 1, 18, 2, false, Profile::Type::Uint8 }, +{ 0, sessionMaxCadenceSubFields, "max_cadence", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 1, 19, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 20, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_ascent", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 22, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_descent", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 23, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_training_effect", "", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 24, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "first_lap_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 25, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "num_laps", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 26, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "event_group", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 27, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "trigger", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 28, 0, false, Profile::Type::SessionTrigger }, +{ 0, 0, "nec_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 29, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "nec_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 30, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "swc_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 31, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "swc_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 32, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "num_lengths", "lengths", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 33, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "normalized_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 34, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "training_stress_score", "tss", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 35, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "intensity_factor", "if", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 36, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "left_right_balance", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 37, 132, false, Profile::Type::LeftRightBalance100 }, +{ 0, 0, "avg_stroke_count", "strokes/lap", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 41, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_stroke_distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 42, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "swim_stroke", "swim_stroke", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 43, 0, false, Profile::Type::SwimStroke }, +{ 0, 0, "pool_length", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 44, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "threshold_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 45, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "pool_length_unit", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 46, 0, false, Profile::Type::DisplayMeasure }, +{ 0, 0, "num_active_lengths", "lengths", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 47, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_work", "J", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 48, 134, false, Profile::Type::Uint32 }, +{ sessionAvgAltitudeComponents, 0, "avg_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 1, 0, 49, 132, false, Profile::Type::Uint16 }, +{ sessionMaxAltitudeComponents, 0, "max_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 1, 0, 50, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "gps_accuracy", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 51, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 52, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_pos_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 53, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_neg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 54, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_pos_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 55, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_neg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 56, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 57, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "max_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 58, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "total_moving_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 59, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_pos_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 60, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_neg_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 61, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_pos_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 62, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_neg_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 63, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "min_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 64, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "time_in_hr_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 65, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_speed_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 66, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_cadence_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 67, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_power_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 68, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_lap_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 69, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "best_lap_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 70, 132, false, Profile::Type::Uint16 }, +{ sessionMinAltitudeComponents, 0, "min_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 1, 0, 71, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "player_score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 82, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "opponent_score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 83, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "opponent_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 84, 7, false, Profile::Type::String }, +{ 0, 0, "stroke_count", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 85, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "zone_count", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 86, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_ball_speed", "m/s", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 87, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_ball_speed", "m/s", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 88, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_vertical_oscillation", "mm", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 89, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_stance_time_percent", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 90, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_stance_time", "ms", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 91, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_fractional_cadence", "rpm", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 92, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_fractional_cadence", "rpm", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 93, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_fractional_cycles", "cycles", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 94, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_total_hemoglobin_conc", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 95, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_total_hemoglobin_conc", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 96, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_total_hemoglobin_conc", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 97, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_saturated_hemoglobin_percent", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 98, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_saturated_hemoglobin_percent", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 99, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_saturated_hemoglobin_percent", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 100, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_left_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 101, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 102, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_left_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 103, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 104, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_combined_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 105, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "sport_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 111, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "time_standing", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 112, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "stand_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 113, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_left_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 114, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "avg_right_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 115, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "avg_left_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 116, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_left_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 117, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 118, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 119, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_power_position", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 120, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_power_position", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 121, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_cadence_position", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 122, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_cadence_position", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 123, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "enhanced_avg_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 124, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_max_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 125, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_avg_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 126, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_min_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 127, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_max_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 128, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_lev_motor_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 129, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_lev_motor_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 130, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "lev_battery_consumption", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 131, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_vertical_ratio", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 132, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_stance_time_balance", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 133, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_step_length", "mm", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 134, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_anaerobic_training_effect", "", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 137, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_vam", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 139, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "training_load_peak", "", (FIT_FLOAT64)65536, (FIT_FLOAT64)0, 0, 0, 168, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "total_grit", "kGrit", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 181, 136, false, Profile::Type::Float32 }, +{ 0, 0, "total_flow", "Flow", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 182, 136, false, Profile::Type::Float32 }, +{ 0, 0, "jump_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 183, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_grit", "kGrit", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 186, 136, false, Profile::Type::Float32 }, +{ 0, 0, "avg_flow", "Flow", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 187, 136, false, Profile::Type::Float32 }, +{ 0, 0, "total_fractional_ascent", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 199, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_fractional_descent", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 200, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_core_temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 208, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_core_temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 209, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_core_temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 210, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD_COMPONENT lapAvgSpeedComponents[] = +{ + { (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 110, 16, FIT_FALSE }, // enhanced_avg_speed +}; + +static const Profile::FIELD_COMPONENT lapMaxSpeedComponents[] = +{ + { (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 111, 16, FIT_FALSE }, // enhanced_max_speed +}; + +static const Profile::FIELD_COMPONENT lapAvgAltitudeComponents[] = +{ + { (FIT_FLOAT64)5, (FIT_FLOAT64)500, 112, 16, FIT_FALSE }, // enhanced_avg_altitude +}; + +static const Profile::FIELD_COMPONENT lapMaxAltitudeComponents[] = +{ + { (FIT_FLOAT64)5, (FIT_FLOAT64)500, 114, 16, FIT_FALSE }, // enhanced_max_altitude +}; + +static const Profile::FIELD_COMPONENT lapMinAltitudeComponents[] = +{ + { (FIT_FLOAT64)5, (FIT_FLOAT64)500, 113, 16, FIT_FALSE }, // enhanced_min_altitude +}; + +static const Profile::SUBFIELD_MAP lapTotalCyclesTotalStridesMaps[] = +{ + { 1, 25 }, // sport == running + { 11, 25 }, // sport == walking +}; + +static const Profile::SUBFIELD_MAP lapTotalCyclesTotalStrokesMaps[] = +{ + { 2, 25 }, // sport == cycling + { 5, 25 }, // sport == swimming + { 15, 25 }, // sport == rowing + { 37, 25 }, // sport == stand_up_paddleboarding +}; + +static const Profile::SUBFIELD_MAP lapAvgCadenceAvgRunningCadenceMaps[] = +{ + { 1, 25 }, // sport == running +}; + +static const Profile::SUBFIELD_MAP lapMaxCadenceMaxRunningCadenceMaps[] = +{ + { 1, 25 }, // sport == running +}; + +static const Profile::SUBFIELD lapTotalCyclesSubFields[] = +{ + { lapTotalCyclesTotalStridesMaps, 0, "total_strides", "strides", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 0, 134 }, + { lapTotalCyclesTotalStrokesMaps, 0, "total_strokes", "strokes", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 4, 0, 134 }, +}; + +static const Profile::SUBFIELD lapAvgCadenceSubFields[] = +{ + { lapAvgCadenceAvgRunningCadenceMaps, 0, "avg_running_cadence", "strides/min", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, +}; + +static const Profile::SUBFIELD lapMaxCadenceSubFields[] = +{ + { lapMaxCadenceMaxRunningCadenceMaps, 0, "max_running_cadence", "strides/min", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, +}; + +static const Profile::FIELD lapFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Event }, +{ 0, 0, "event_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::EventType }, +{ 0, 0, "start_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::DateTime }, +{ 0, 0, "start_position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "start_position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "end_position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "end_position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "total_elapsed_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 7, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_timer_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 8, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 9, 134, false, Profile::Type::Uint32 }, +{ 0, lapTotalCyclesSubFields, "total_cycles", "cycles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 10, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_fat_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 132, false, Profile::Type::Uint16 }, +{ lapAvgSpeedComponents, 0, "avg_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 1, 0, 13, 132, false, Profile::Type::Uint16 }, +{ lapMaxSpeedComponents, 0, "max_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 1, 0, 14, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 15, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 16, 2, false, Profile::Type::Uint8 }, +{ 0, lapAvgCadenceSubFields, "avg_cadence", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 1, 17, 2, false, Profile::Type::Uint8 }, +{ 0, lapMaxCadenceSubFields, "max_cadence", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 1, 18, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 20, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_ascent", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_descent", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 22, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "intensity", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 23, 0, false, Profile::Type::Intensity }, +{ 0, 0, "lap_trigger", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 24, 0, false, Profile::Type::LapTrigger }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 25, 0, false, Profile::Type::Sport }, +{ 0, 0, "event_group", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 26, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "num_lengths", "lengths", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 32, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "normalized_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 33, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "left_right_balance", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 34, 132, false, Profile::Type::LeftRightBalance100 }, +{ 0, 0, "first_length_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 35, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_stroke_distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 37, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "swim_stroke", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 38, 0, false, Profile::Type::SwimStroke }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 39, 0, false, Profile::Type::SubSport }, +{ 0, 0, "num_active_lengths", "lengths", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 40, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_work", "J", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 41, 134, false, Profile::Type::Uint32 }, +{ lapAvgAltitudeComponents, 0, "avg_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 1, 0, 42, 132, false, Profile::Type::Uint16 }, +{ lapMaxAltitudeComponents, 0, "max_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 1, 0, 43, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "gps_accuracy", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 44, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 45, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_pos_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 46, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_neg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 47, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_pos_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 48, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_neg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 49, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 50, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "max_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 51, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "total_moving_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 52, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_pos_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 53, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_neg_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 54, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_pos_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 55, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_neg_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 56, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "time_in_hr_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 57, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_speed_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 58, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_cadence_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 59, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_power_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 60, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "repetition_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 61, 132, false, Profile::Type::Uint16 }, +{ lapMinAltitudeComponents, 0, "min_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 1, 0, 62, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 63, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "wkt_step_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 71, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "opponent_score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 74, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "stroke_count", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 75, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "zone_count", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 76, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_vertical_oscillation", "mm", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 77, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_stance_time_percent", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 78, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_stance_time", "ms", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 79, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_fractional_cadence", "rpm", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 80, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_fractional_cadence", "rpm", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 81, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_fractional_cycles", "cycles", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 82, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "player_score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 83, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_total_hemoglobin_conc", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 84, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_total_hemoglobin_conc", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 85, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_total_hemoglobin_conc", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 86, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_saturated_hemoglobin_percent", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 87, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_saturated_hemoglobin_percent", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 88, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_saturated_hemoglobin_percent", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 89, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_left_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 91, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 92, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_left_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 93, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 94, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_combined_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 95, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "time_standing", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 98, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "stand_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 99, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_left_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 100, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "avg_right_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 101, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "avg_left_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 102, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_left_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 103, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 104, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 105, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_power_position", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 106, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_power_position", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 107, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_cadence_position", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 108, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_cadence_position", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 109, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "enhanced_avg_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 110, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_max_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 111, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_avg_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 112, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_min_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 113, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_max_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 114, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_lev_motor_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 115, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_lev_motor_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 116, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "lev_battery_consumption", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 117, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_vertical_ratio", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 118, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_stance_time_balance", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 119, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_step_length", "mm", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 120, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_vam", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 121, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_grit", "kGrit", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 149, 136, false, Profile::Type::Float32 }, +{ 0, 0, "total_flow", "Flow", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 150, 136, false, Profile::Type::Float32 }, +{ 0, 0, "jump_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 151, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_grit", "kGrit", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 153, 136, false, Profile::Type::Float32 }, +{ 0, 0, "avg_flow", "Flow", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 154, 136, false, Profile::Type::Float32 }, +{ 0, 0, "total_fractional_ascent", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 156, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_fractional_descent", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 157, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_core_temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 158, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_core_temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 159, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_core_temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 160, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD lengthFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Event }, +{ 0, 0, "event_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::EventType }, +{ 0, 0, "start_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::DateTime }, +{ 0, 0, "total_elapsed_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_timer_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_strokes", "strokes", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 6, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "swim_stroke", "swim_stroke", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::SwimStroke }, +{ 0, 0, "avg_swimming_cadence", "strokes/min", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "event_group", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "length_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 0, false, Profile::Type::LengthType }, +{ 0, 0, "player_score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 18, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "opponent_score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "stroke_count", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 20, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "zone_count", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD_COMPONENT recordAltitudeComponents[] = +{ + { (FIT_FLOAT64)5, (FIT_FLOAT64)500, 78, 16, FIT_FALSE }, // enhanced_altitude +}; + +static const Profile::FIELD_COMPONENT recordSpeedComponents[] = +{ + { (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 73, 16, FIT_FALSE }, // enhanced_speed +}; + +static const Profile::FIELD_COMPONENT recordCompressedSpeedDistanceComponents[] = +{ + { (FIT_FLOAT64)100, (FIT_FLOAT64)0, 6, 12, FIT_FALSE }, // speed + { (FIT_FLOAT64)16, (FIT_FLOAT64)0, 5, 12, FIT_TRUE }, // distance +}; + +static const Profile::FIELD_COMPONENT recordCyclesComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 19, 8, FIT_TRUE }, // total_cycles +}; + +static const Profile::FIELD_COMPONENT recordCompressedAccumulatedPowerComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 29, 16, FIT_TRUE }, // accumulated_power +}; + +static const Profile::FIELD recordFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 133, false, Profile::Type::Sint32 }, +{ recordAltitudeComponents, 0, "altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 1, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "cadence", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 5, 134, true, Profile::Type::Uint32 }, +{ recordSpeedComponents, 0, "speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 1, 0, 6, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 132, false, Profile::Type::Uint16 }, +{ recordCompressedSpeedDistanceComponents, 0, "compressed_speed_distance", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 2, 0, 8, 13, false, Profile::Type::Byte }, +{ 0, 0, "grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 9, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "resistance", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "time_from_course", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 11, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "cycle_length", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 12, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "speed_1s", "m/s", (FIT_FLOAT64)16, (FIT_FLOAT64)0, 0, 0, 17, 2, false, Profile::Type::Uint8 }, +{ recordCyclesComponents, 0, "cycles", "cycles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 1, 0, 18, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_cycles", "cycles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 134, true, Profile::Type::Uint32 }, +{ recordCompressedAccumulatedPowerComponents, 0, "compressed_accumulated_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 1, 0, 28, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "accumulated_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 29, 134, true, Profile::Type::Uint32 }, +{ 0, 0, "left_right_balance", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 30, 2, false, Profile::Type::LeftRightBalance }, +{ 0, 0, "gps_accuracy", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 31, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 32, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 33, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "vertical_oscillation", "mm", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 39, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "stance_time_percent", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 40, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "stance_time", "ms", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 41, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "activity_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 42, 0, false, Profile::Type::ActivityType }, +{ 0, 0, "left_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 43, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "right_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 44, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "left_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 45, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "right_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 46, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "combined_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 47, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "time128", "s", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 48, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "stroke_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 49, 0, false, Profile::Type::StrokeType }, +{ 0, 0, "zone", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 50, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "ball_speed", "m/s", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 51, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "cadence256", "rpm", (FIT_FLOAT64)256, (FIT_FLOAT64)0, 0, 0, 52, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "fractional_cadence", "rpm", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 53, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_hemoglobin_conc", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 54, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_hemoglobin_conc_min", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 55, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_hemoglobin_conc_max", "g/dL", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 56, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "saturated_hemoglobin_percent", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 57, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "saturated_hemoglobin_percent_min", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 58, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "saturated_hemoglobin_percent_max", "%", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 59, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "device_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 62, 2, false, Profile::Type::DeviceIndex }, +{ 0, 0, "left_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 67, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "right_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 68, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "left_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 69, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "left_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 70, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "right_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 71, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "right_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 72, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "enhanced_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 73, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 78, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "battery_soc", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 81, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "motor_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 82, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "vertical_ratio", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 83, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "stance_time_balance", "percent", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 84, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "step_length", "mm", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 85, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "absolute_pressure", "Pa", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 91, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "depth", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 92, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "next_stop_depth", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 93, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "next_stop_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 94, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_to_surface", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 95, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "ndl_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 96, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "cns_load", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 97, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "n2_load", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 98, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "grit", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 114, 136, false, Profile::Type::Float32 }, +{ 0, 0, "flow", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 115, 136, false, Profile::Type::Float32 }, +{ 0, 0, "ebike_travel_range", "km", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 117, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "ebike_battery_level", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 118, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "ebike_assist_mode", "depends on sensor", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 119, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "ebike_assist_level_percent", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 120, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "core_temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 139, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD_COMPONENT eventData16Components[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 3, 16, FIT_FALSE }, // data +}; + +static const Profile::SUBFIELD_MAP eventDataTimerTriggerMaps[] = +{ + { 0, 0 }, // event == timer +}; + +static const Profile::SUBFIELD_MAP eventDataCoursePointIndexMaps[] = +{ + { 10, 0 }, // event == course_point +}; + +static const Profile::SUBFIELD_MAP eventDataBatteryLevelMaps[] = +{ + { 11, 0 }, // event == battery +}; + +static const Profile::SUBFIELD_MAP eventDataVirtualPartnerSpeedMaps[] = +{ + { 12, 0 }, // event == virtual_partner_pace +}; + +static const Profile::SUBFIELD_MAP eventDataHrHighAlertMaps[] = +{ + { 13, 0 }, // event == hr_high_alert +}; + +static const Profile::SUBFIELD_MAP eventDataHrLowAlertMaps[] = +{ + { 14, 0 }, // event == hr_low_alert +}; + +static const Profile::SUBFIELD_MAP eventDataSpeedHighAlertMaps[] = +{ + { 15, 0 }, // event == speed_high_alert +}; + +static const Profile::SUBFIELD_MAP eventDataSpeedLowAlertMaps[] = +{ + { 16, 0 }, // event == speed_low_alert +}; + +static const Profile::SUBFIELD_MAP eventDataCadHighAlertMaps[] = +{ + { 17, 0 }, // event == cad_high_alert +}; + +static const Profile::SUBFIELD_MAP eventDataCadLowAlertMaps[] = +{ + { 18, 0 }, // event == cad_low_alert +}; + +static const Profile::SUBFIELD_MAP eventDataPowerHighAlertMaps[] = +{ + { 19, 0 }, // event == power_high_alert +}; + +static const Profile::SUBFIELD_MAP eventDataPowerLowAlertMaps[] = +{ + { 20, 0 }, // event == power_low_alert +}; + +static const Profile::SUBFIELD_MAP eventDataTimeDurationAlertMaps[] = +{ + { 23, 0 }, // event == time_duration_alert +}; + +static const Profile::SUBFIELD_MAP eventDataDistanceDurationAlertMaps[] = +{ + { 24, 0 }, // event == distance_duration_alert +}; + +static const Profile::SUBFIELD_MAP eventDataCalorieDurationAlertMaps[] = +{ + { 25, 0 }, // event == calorie_duration_alert +}; + +static const Profile::SUBFIELD_MAP eventDataFitnessEquipmentStateMaps[] = +{ + { 27, 0 }, // event == fitness_equipment +}; + +static const Profile::SUBFIELD_MAP eventDataSportPointMaps[] = +{ + { 33, 0 }, // event == sport_point +}; + +static const Profile::FIELD_COMPONENT eventDataSportPointComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 7, 16, FIT_FALSE }, // score + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 8, 16, FIT_FALSE }, // opponent_score +}; + +static const Profile::SUBFIELD_MAP eventDataGearChangeDataMaps[] = +{ + { 42, 0 }, // event == front_gear_change + { 43, 0 }, // event == rear_gear_change +}; + +static const Profile::FIELD_COMPONENT eventDataGearChangeDataComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 11, 8, FIT_FALSE }, // rear_gear_num + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 12, 8, FIT_FALSE }, // rear_gear + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 9, 8, FIT_FALSE }, // front_gear_num + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 10, 8, FIT_FALSE }, // front_gear +}; + +static const Profile::SUBFIELD_MAP eventDataRiderPositionMaps[] = +{ + { 44, 0 }, // event == rider_position_change +}; + +static const Profile::SUBFIELD_MAP eventDataCommTimeoutMaps[] = +{ + { 47, 0 }, // event == comm_timeout +}; + +static const Profile::SUBFIELD_MAP eventDataRadarThreatAlertMaps[] = +{ + { 75, 0 }, // event == radar_threat_alert +}; + +static const Profile::FIELD_COMPONENT eventDataRadarThreatAlertComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 21, 8, FIT_FALSE }, // radar_threat_level_max + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 22, 8, FIT_FALSE }, // radar_threat_count + { (FIT_FLOAT64)10, (FIT_FLOAT64)0, 23, 8, FIT_FALSE }, // radar_threat_avg_approach_speed + { (FIT_FLOAT64)10, (FIT_FLOAT64)0, 24, 8, FIT_FALSE }, // radar_threat_max_approach_speed +}; + +static const Profile::SUBFIELD eventDataSubFields[] = +{ + { eventDataTimerTriggerMaps, 0, "timer_trigger", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 0 }, + { eventDataCoursePointIndexMaps, 0, "course_point_index", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataBatteryLevelMaps, 0, "battery_level", "V", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataVirtualPartnerSpeedMaps, 0, "virtual_partner_speed", "m/s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataHrHighAlertMaps, 0, "hr_high_alert", "bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, + { eventDataHrLowAlertMaps, 0, "hr_low_alert", "bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, + { eventDataSpeedHighAlertMaps, 0, "speed_high_alert", "m/s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { eventDataSpeedLowAlertMaps, 0, "speed_low_alert", "m/s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { eventDataCadHighAlertMaps, 0, "cad_high_alert", "rpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataCadLowAlertMaps, 0, "cad_low_alert", "rpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataPowerHighAlertMaps, 0, "power_high_alert", "watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataPowerLowAlertMaps, 0, "power_low_alert", "watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataTimeDurationAlertMaps, 0, "time_duration_alert", "s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { eventDataDistanceDurationAlertMaps, 0, "distance_duration_alert", "m", (FIT_FLOAT32)100, (FIT_FLOAT32)0, 1, 0, 134 }, + { eventDataCalorieDurationAlertMaps, 0, "calorie_duration_alert", "calories", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { eventDataFitnessEquipmentStateMaps, 0, "fitness_equipment_state", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 0 }, + { eventDataSportPointMaps, eventDataSportPointComponents, "sport_point", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 2, 134 }, + { eventDataGearChangeDataMaps, eventDataGearChangeDataComponents, "gear_change_data", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 4, 134 }, + { eventDataRiderPositionMaps, 0, "rider_position", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 0 }, + { eventDataCommTimeoutMaps, 0, "comm_timeout", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { eventDataRadarThreatAlertMaps, eventDataRadarThreatAlertComponents, "radar_threat_alert", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 4, 134 }, +}; + +static const Profile::FIELD eventFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Event }, +{ 0, 0, "event_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::EventType }, +{ eventData16Components, 0, "data16", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 1, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, eventDataSubFields, "data", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 21, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "event_group", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "opponent_score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "front_gear_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "front_gear", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "rear_gear_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "rear_gear", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "device_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 2, false, Profile::Type::DeviceIndex }, +{ 0, 0, "radar_threat_level_max", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 0, false, Profile::Type::RadarThreatLevelType }, +{ 0, 0, "radar_threat_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 22, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "radar_threat_avg_approach_speed", "m/s", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 23, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "radar_threat_max_approach_speed", "m/s", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 24, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::SUBFIELD_MAP deviceInfoDeviceTypeAntplusDeviceTypeMaps[] = +{ + { 1, 25 }, // source_type == antplus +}; + +static const Profile::SUBFIELD_MAP deviceInfoDeviceTypeAntDeviceTypeMaps[] = +{ + { 0, 25 }, // source_type == ant +}; + +static const Profile::SUBFIELD_MAP deviceInfoProductFaveroProductMaps[] = +{ + { 263, 2 }, // manufacturer == favero_electronics +}; + +static const Profile::SUBFIELD_MAP deviceInfoProductGarminProductMaps[] = +{ + { 1, 2 }, // manufacturer == garmin + { 15, 2 }, // manufacturer == dynastream + { 13, 2 }, // manufacturer == dynastream_oem + { 89, 2 }, // manufacturer == tacx +}; + +static const Profile::SUBFIELD deviceInfoDeviceTypeSubFields[] = +{ + { deviceInfoDeviceTypeAntplusDeviceTypeMaps, 0, "antplus_device_type", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, + { deviceInfoDeviceTypeAntDeviceTypeMaps, 0, "ant_device_type", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 2 }, +}; + +static const Profile::SUBFIELD deviceInfoProductSubFields[] = +{ + { deviceInfoProductFaveroProductMaps, 0, "favero_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { deviceInfoProductGarminProductMaps, 0, "garmin_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 4, 0, 132 }, +}; + +static const Profile::FIELD deviceInfoFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "device_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::DeviceIndex }, +{ 0, deviceInfoDeviceTypeSubFields, "device_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "manufacturer", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Manufacturer }, +{ 0, 0, "serial_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 140, false, Profile::Type::Uint32z }, +{ 0, deviceInfoProductSubFields, "product", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "software_version", "", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "hardware_version", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "cum_operating_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "battery_voltage", "V", (FIT_FLOAT64)256, (FIT_FLOAT64)0, 0, 0, 10, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "battery_status", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 2, false, Profile::Type::BatteryStatus }, +{ 0, 0, "sensor_position", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 18, 0, false, Profile::Type::BodyLocation }, +{ 0, 0, "descriptor", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 7, false, Profile::Type::String }, +{ 0, 0, "ant_transmission_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 20, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "ant_device_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "ant_network", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 22, 0, false, Profile::Type::AntNetwork }, +{ 0, 0, "source_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 25, 0, false, Profile::Type::SourceType }, +{ 0, 0, "product_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 27, 7, false, Profile::Type::String }, +{ 0, 0, "battery_level", "%", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 32, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD deviceAuxBatteryInfoFields[] = +{ +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "device_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::DeviceIndex }, +{ 0, 0, "battery_voltage", "V", (FIT_FLOAT64)256, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "battery_status", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::BatteryStatus }, +{ 0, 0, "battery_identifier", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::SUBFIELD_MAP trainingFileProductFaveroProductMaps[] = +{ + { 263, 1 }, // manufacturer == favero_electronics +}; + +static const Profile::SUBFIELD_MAP trainingFileProductGarminProductMaps[] = +{ + { 1, 1 }, // manufacturer == garmin + { 15, 1 }, // manufacturer == dynastream + { 13, 1 }, // manufacturer == dynastream_oem + { 89, 1 }, // manufacturer == tacx +}; + +static const Profile::SUBFIELD trainingFileProductSubFields[] = +{ + { trainingFileProductFaveroProductMaps, 0, "favero_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { trainingFileProductGarminProductMaps, 0, "garmin_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 4, 0, 132 }, +}; + +static const Profile::FIELD trainingFileFields[] = +{ +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::File }, +{ 0, 0, "manufacturer", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Manufacturer }, +{ 0, trainingFileProductSubFields, "product", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "serial_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 140, false, Profile::Type::Uint32z }, +{ 0, 0, "time_created", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::DateTime }, +}; + +static const Profile::FIELD weatherConditionsFields[] = +{ +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "weather_report", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::WeatherReport }, +{ 0, 0, "temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "condition", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::WeatherStatus }, +{ 0, 0, "wind_direction", "degrees", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "wind_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "precipitation_probability", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "temperature_feels_like", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "relative_humidity", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "location", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 7, false, Profile::Type::String }, +{ 0, 0, "observed_at_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 134, false, Profile::Type::DateTime }, +{ 0, 0, "observed_location_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "observed_location_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "day_of_week", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 0, false, Profile::Type::DayOfWeek }, +{ 0, 0, "high_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "low_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 14, 1, false, Profile::Type::Sint8 }, +}; + +static const Profile::FIELD weatherAlertFields[] = +{ +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "report_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "issue_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::DateTime }, +{ 0, 0, "expire_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::DateTime }, +{ 0, 0, "severity", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::WeatherSeverity }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::WeatherSevereType }, +}; + +static const Profile::FIELD gpsMetadataFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "enhanced_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "enhanced_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "heading", "degrees", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "utc_timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 134, false, Profile::Type::DateTime }, +{ 0, 0, "velocity", "m/s", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 7, 131, false, Profile::Type::Sint16 }, +}; + +static const Profile::FIELD cameraEventFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "camera_event_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::CameraEventType }, +{ 0, 0, "camera_file_uuid", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 7, false, Profile::Type::String }, +{ 0, 0, "camera_orientation", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::CameraOrientationType }, +}; + +static const Profile::FIELD gyroscopeDataFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "sample_time_offset", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "gyro_x", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "gyro_y", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "gyro_z", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "calibrated_gyro_x", "deg/s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 136, false, Profile::Type::Float32 }, +{ 0, 0, "calibrated_gyro_y", "deg/s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 136, false, Profile::Type::Float32 }, +{ 0, 0, "calibrated_gyro_z", "deg/s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 136, false, Profile::Type::Float32 }, +}; + +static const Profile::FIELD accelerometerDataFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "sample_time_offset", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "accel_x", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "accel_y", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "accel_z", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "calibrated_accel_x", "g", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 136, false, Profile::Type::Float32 }, +{ 0, 0, "calibrated_accel_y", "g", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 136, false, Profile::Type::Float32 }, +{ 0, 0, "calibrated_accel_z", "g", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 136, false, Profile::Type::Float32 }, +{ 0, 0, "compressed_calibrated_accel_x", "mG", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "compressed_calibrated_accel_y", "mG", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "compressed_calibrated_accel_z", "mG", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 131, false, Profile::Type::Sint16 }, +}; + +static const Profile::FIELD magnetometerDataFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "sample_time_offset", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "mag_x", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "mag_y", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "mag_z", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "calibrated_mag_x", "G", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 136, false, Profile::Type::Float32 }, +{ 0, 0, "calibrated_mag_y", "G", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 136, false, Profile::Type::Float32 }, +{ 0, 0, "calibrated_mag_z", "G", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 136, false, Profile::Type::Float32 }, +}; + +static const Profile::FIELD barometerDataFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "sample_time_offset", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "baro_pres", "Pa", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::SUBFIELD_MAP threeDSensorCalibrationCalibrationFactorAccelCalFactorMaps[] = +{ + { 0, 0 }, // sensor_type == accelerometer +}; + +static const Profile::SUBFIELD_MAP threeDSensorCalibrationCalibrationFactorGyroCalFactorMaps[] = +{ + { 1, 0 }, // sensor_type == gyroscope +}; + +static const Profile::SUBFIELD threeDSensorCalibrationCalibrationFactorSubFields[] = +{ + { threeDSensorCalibrationCalibrationFactorAccelCalFactorMaps, 0, "accel_cal_factor", "g", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { threeDSensorCalibrationCalibrationFactorGyroCalFactorMaps, 0, "gyro_cal_factor", "deg/s", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::FIELD threeDSensorCalibrationFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "sensor_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::SensorType }, +{ 0, threeDSensorCalibrationCalibrationFactorSubFields, "calibration_factor", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 1, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "calibration_divisor", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "level_shift", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "offset_cal", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "orientation_matrix", "", (FIT_FLOAT64)65535, (FIT_FLOAT64)0, 0, 0, 5, 133, false, Profile::Type::Sint32 }, +}; + +static const Profile::SUBFIELD_MAP oneDSensorCalibrationCalibrationFactorBaroCalFactorMaps[] = +{ + { 3, 0 }, // sensor_type == barometer +}; + +static const Profile::SUBFIELD oneDSensorCalibrationCalibrationFactorSubFields[] = +{ + { oneDSensorCalibrationCalibrationFactorBaroCalFactorMaps, 0, "baro_cal_factor", "Pa", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::FIELD oneDSensorCalibrationFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "sensor_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::SensorType }, +{ 0, oneDSensorCalibrationCalibrationFactorSubFields, "calibration_factor", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 1, 1, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "calibration_divisor", "counts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "level_shift", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "offset_cal", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 133, false, Profile::Type::Sint32 }, +}; + +static const Profile::FIELD videoFrameFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "frame_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD obdiiDataFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "time_offset", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "pid", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 13, false, Profile::Type::Byte }, +{ 0, 0, "raw_data", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 13, false, Profile::Type::Byte }, +{ 0, 0, "pid_data_size", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "system_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "start_timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 134, false, Profile::Type::DateTime }, +{ 0, 0, "start_timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD nmeaSentenceFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "sentence", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD aviationAttitudeFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timestamp_ms", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "system_time", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "pitch", "radians", (FIT_FLOAT64)10430.38, (FIT_FLOAT64)0, 0, 0, 2, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "roll", "radians", (FIT_FLOAT64)10430.38, (FIT_FLOAT64)0, 0, 0, 3, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "accel_lateral", "m/s^2", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 4, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "accel_normal", "m/s^2", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 5, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "turn_rate", "radians/second", (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 0, 0, 6, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "stage", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::AttitudeStage }, +{ 0, 0, "attitude_stage_complete", "%", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "track", "radians", (FIT_FLOAT64)10430.38, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "validity", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 132, false, Profile::Type::AttitudeValidity }, +}; + +static const Profile::FIELD videoFields[] = +{ +{ 0, 0, "url", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "hosting_provider", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +{ 0, 0, "duration", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD videoTitleFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "message_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "text", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD videoDescriptionFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "message_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "text", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD videoClipFields[] = +{ +{ 0, 0, "clip_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "start_timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::DateTime }, +{ 0, 0, "start_timestamp_ms", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "end_timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::DateTime }, +{ 0, 0, "end_timestamp_ms", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "clip_start", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "clip_end", "ms", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD setFields[] = +{ +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 134, false, Profile::Type::DateTime }, +{ 0, 0, "duration", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 0, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "repetitions", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "weight", "kg", (FIT_FLOAT64)16, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "set_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 2, false, Profile::Type::SetType }, +{ 0, 0, "start_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 134, false, Profile::Type::DateTime }, +{ 0, 0, "category", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 132, false, Profile::Type::ExerciseCategory }, +{ 0, 0, "category_subtype", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "weight_display_unit", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::FitBaseUnit }, +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "wkt_step_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 132, false, Profile::Type::MessageIndex }, +}; + +static const Profile::FIELD_COMPONENT jumpSpeedComponents[] = +{ + { (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 8, 16, FIT_FALSE }, // enhanced_speed +}; + +static const Profile::FIELD jumpFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "distance", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 136, false, Profile::Type::Float32 }, +{ 0, 0, "height", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 136, false, Profile::Type::Float32 }, +{ 0, 0, "rotations", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "hang_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 136, false, Profile::Type::Float32 }, +{ 0, 0, "score", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 136, false, Profile::Type::Float32 }, +{ 0, 0, "position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 133, false, Profile::Type::Sint32 }, +{ jumpSpeedComponents, 0, "speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 1, 0, 7, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "enhanced_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 8, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD climbProFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "climb_pro_event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::ClimbProEvent }, +{ 0, 0, "climb_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "climb_category", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "current_dist", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 136, false, Profile::Type::Float32 }, +}; + +static const Profile::FIELD fieldDescriptionFields[] = +{ +{ 0, 0, "developer_data_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "field_definition_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "fit_base_type_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::FitBaseType }, +{ 0, 0, "field_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 7, false, Profile::Type::String }, +{ 0, 0, "array", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "components", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 7, false, Profile::Type::String }, +{ 0, 0, "scale", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "offset", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "units", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 7, false, Profile::Type::String }, +{ 0, 0, "bits", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 7, false, Profile::Type::String }, +{ 0, 0, "accumulate", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 7, false, Profile::Type::String }, +{ 0, 0, "fit_base_unit_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 132, false, Profile::Type::FitBaseUnit }, +{ 0, 0, "native_mesg_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 14, 132, false, Profile::Type::MesgNum }, +{ 0, 0, "native_field_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 15, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD developerDataIdFields[] = +{ +{ 0, 0, "developer_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 13, false, Profile::Type::Byte }, +{ 0, 0, "application_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 13, false, Profile::Type::Byte }, +{ 0, 0, "manufacturer_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Manufacturer }, +{ 0, 0, "developer_data_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "application_version", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD courseFields[] = +{ +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::Sport }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 7, false, Profile::Type::String }, +{ 0, 0, "capabilities", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 140, false, Profile::Type::CourseCapabilities }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::SubSport }, +}; + +static const Profile::FIELD coursePointFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::DateTime }, +{ 0, 0, "position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::CoursePoint }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 7, false, Profile::Type::String }, +{ 0, 0, "favorite", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 0, false, Profile::Type::Bool }, +}; + +static const Profile::FIELD segmentIdFields[] = +{ +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "uuid", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::Sport }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::Bool }, +{ 0, 0, "user_profile_primary_key", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "device_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "default_race_leader", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "delete_status", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::SegmentDeleteStatus }, +{ 0, 0, "selection_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 0, false, Profile::Type::SegmentSelectionType }, +}; + +static const Profile::FIELD segmentLeaderboardEntryFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::SegmentLeaderboardType }, +{ 0, 0, "group_primary_key", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "activity_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "segment_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "activity_id_string", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD segmentPointFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "leader_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 5, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::SUBFIELD_MAP segmentLapTotalCyclesTotalStrokesMaps[] = +{ + { 2, 23 }, // sport == cycling +}; + +static const Profile::SUBFIELD segmentLapTotalCyclesSubFields[] = +{ + { segmentLapTotalCyclesTotalStrokesMaps, 0, "total_strokes", "strokes", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::FIELD segmentLapFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Event }, +{ 0, 0, "event_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::EventType }, +{ 0, 0, "start_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::DateTime }, +{ 0, 0, "start_position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "start_position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "end_position_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "end_position_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "total_elapsed_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 7, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_timer_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 8, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 9, 134, false, Profile::Type::Uint32 }, +{ 0, segmentLapTotalCyclesSubFields, "total_cycles", "cycles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 1, 10, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "total_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_fat_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 13, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 14, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 15, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 16, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_cadence", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 17, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_cadence", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 18, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 20, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_ascent", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 21, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "total_descent", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 22, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 23, 0, false, Profile::Type::Sport }, +{ 0, 0, "event_group", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 24, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "nec_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 25, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "nec_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 26, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "swc_lat", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 27, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "swc_long", "semicircles", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 28, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 29, 7, false, Profile::Type::String }, +{ 0, 0, "normalized_power", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 30, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "left_right_balance", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 31, 132, false, Profile::Type::LeftRightBalance100 }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 32, 0, false, Profile::Type::SubSport }, +{ 0, 0, "total_work", "J", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 33, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 34, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 35, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "gps_accuracy", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 36, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 37, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_pos_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 38, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_neg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 39, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_pos_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 40, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_neg_grade", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 41, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 42, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "max_temperature", "C", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 43, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "total_moving_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 44, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_pos_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 45, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "avg_neg_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 46, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_pos_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 47, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "max_neg_vertical_speed", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 48, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "time_in_hr_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 49, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_speed_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 50, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_cadence_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 51, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "time_in_power_zone", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 52, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "repetition_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 53, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_altitude", "m", (FIT_FLOAT64)5, (FIT_FLOAT64)500, 0, 0, 54, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "min_heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 55, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "active_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 56, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "wkt_step_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 57, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "sport_event", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 58, 0, false, Profile::Type::SportEvent }, +{ 0, 0, "avg_left_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 59, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_torque_effectiveness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 60, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_left_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 61, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 62, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_combined_pedal_smoothness", "percent", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 0, 63, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "status", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 64, 0, false, Profile::Type::SegmentLapStatus }, +{ 0, 0, "uuid", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 65, 7, false, Profile::Type::String }, +{ 0, 0, "avg_fractional_cadence", "rpm", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 66, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_fractional_cadence", "rpm", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 67, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_fractional_cycles", "cycles", (FIT_FLOAT64)128, (FIT_FLOAT64)0, 0, 0, 68, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "front_gear_shift_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 69, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "rear_gear_shift_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 70, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "time_standing", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 71, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "stand_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 72, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_left_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 73, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "avg_right_pco", "mm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 74, 1, false, Profile::Type::Sint8 }, +{ 0, 0, "avg_left_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 75, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_left_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 76, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_power_phase", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 77, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_right_power_phase_peak", "degrees", (FIT_FLOAT64)0.7111111, (FIT_FLOAT64)0, 0, 0, 78, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "avg_power_position", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 79, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "max_power_position", "watts", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 80, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "avg_cadence_position", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 81, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "max_cadence_position", "rpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 82, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "manufacturer", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 83, 132, false, Profile::Type::Manufacturer }, +{ 0, 0, "total_grit", "kGrit", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 84, 136, false, Profile::Type::Float32 }, +{ 0, 0, "total_flow", "Flow", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 85, 136, false, Profile::Type::Float32 }, +{ 0, 0, "avg_grit", "kGrit", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 86, 136, false, Profile::Type::Float32 }, +{ 0, 0, "avg_flow", "Flow", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 87, 136, false, Profile::Type::Float32 }, +{ 0, 0, "total_fractional_ascent", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 89, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "total_fractional_descent", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 90, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD segmentFileFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "file_uuid", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 7, false, Profile::Type::String }, +{ 0, 0, "enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::Bool }, +{ 0, 0, "user_profile_primary_key", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "leader_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::SegmentLeaderboardType }, +{ 0, 0, "leader_group_primary_key", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "leader_activity_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "leader_activity_id_string", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 7, false, Profile::Type::String }, +{ 0, 0, "default_race_leader", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD workoutFields[] = +{ +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::Sport }, +{ 0, 0, "capabilities", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 140, false, Profile::Type::WorkoutCapabilities }, +{ 0, 0, "num_valid_steps", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "wkt_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 7, false, Profile::Type::String }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 0, false, Profile::Type::SubSport }, +{ 0, 0, "pool_length", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 14, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "pool_length_unit", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 15, 0, false, Profile::Type::DisplayMeasure }, +}; + +static const Profile::FIELD workoutSessionFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 0, false, Profile::Type::Sport }, +{ 0, 0, "sub_sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::SubSport }, +{ 0, 0, "num_valid_steps", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "first_step_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "pool_length", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "pool_length_unit", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::DisplayMeasure }, +}; + +static const Profile::SUBFIELD_MAP workoutStepDurationValueDurationTimeMaps[] = +{ + { 0, 1 }, // duration_type == time + { 28, 1 }, // duration_type == repetition_time +}; + +static const Profile::SUBFIELD_MAP workoutStepDurationValueDurationDistanceMaps[] = +{ + { 1, 1 }, // duration_type == distance +}; + +static const Profile::SUBFIELD_MAP workoutStepDurationValueDurationHrMaps[] = +{ + { 2, 1 }, // duration_type == hr_less_than + { 3, 1 }, // duration_type == hr_greater_than +}; + +static const Profile::SUBFIELD_MAP workoutStepDurationValueDurationCaloriesMaps[] = +{ + { 4, 1 }, // duration_type == calories +}; + +static const Profile::SUBFIELD_MAP workoutStepDurationValueDurationStepMaps[] = +{ + { 6, 1 }, // duration_type == repeat_until_steps_cmplt + { 7, 1 }, // duration_type == repeat_until_time + { 8, 1 }, // duration_type == repeat_until_distance + { 9, 1 }, // duration_type == repeat_until_calories + { 10, 1 }, // duration_type == repeat_until_hr_less_than + { 11, 1 }, // duration_type == repeat_until_hr_greater_than + { 12, 1 }, // duration_type == repeat_until_power_less_than + { 13, 1 }, // duration_type == repeat_until_power_greater_than +}; + +static const Profile::SUBFIELD_MAP workoutStepDurationValueDurationPowerMaps[] = +{ + { 14, 1 }, // duration_type == power_less_than + { 15, 1 }, // duration_type == power_greater_than +}; + +static const Profile::SUBFIELD_MAP workoutStepDurationValueDurationRepsMaps[] = +{ + { 29, 1 }, // duration_type == reps +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueTargetSpeedZoneMaps[] = +{ + { 0, 3 }, // target_type == speed +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueTargetHrZoneMaps[] = +{ + { 1, 3 }, // target_type == heart_rate +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueTargetCadenceZoneMaps[] = +{ + { 3, 3 }, // target_type == cadence +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueTargetPowerZoneMaps[] = +{ + { 4, 3 }, // target_type == power +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueRepeatStepsMaps[] = +{ + { 6, 1 }, // duration_type == repeat_until_steps_cmplt +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueRepeatTimeMaps[] = +{ + { 7, 1 }, // duration_type == repeat_until_time +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueRepeatDistanceMaps[] = +{ + { 8, 1 }, // duration_type == repeat_until_distance +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueRepeatCaloriesMaps[] = +{ + { 9, 1 }, // duration_type == repeat_until_calories +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueRepeatHrMaps[] = +{ + { 10, 1 }, // duration_type == repeat_until_hr_less_than + { 11, 1 }, // duration_type == repeat_until_hr_greater_than +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueRepeatPowerMaps[] = +{ + { 12, 1 }, // duration_type == repeat_until_power_less_than + { 13, 1 }, // duration_type == repeat_until_power_greater_than +}; + +static const Profile::SUBFIELD_MAP workoutStepTargetValueTargetStrokeTypeMaps[] = +{ + { 11, 3 }, // target_type == swim_stroke +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueLowCustomTargetSpeedLowMaps[] = +{ + { 0, 3 }, // target_type == speed +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueLowCustomTargetHeartRateLowMaps[] = +{ + { 1, 3 }, // target_type == heart_rate +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueLowCustomTargetCadenceLowMaps[] = +{ + { 3, 3 }, // target_type == cadence +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueLowCustomTargetPowerLowMaps[] = +{ + { 4, 3 }, // target_type == power +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueHighCustomTargetSpeedHighMaps[] = +{ + { 0, 3 }, // target_type == speed +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueHighCustomTargetHeartRateHighMaps[] = +{ + { 1, 3 }, // target_type == heart_rate +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueHighCustomTargetCadenceHighMaps[] = +{ + { 3, 3 }, // target_type == cadence +}; + +static const Profile::SUBFIELD_MAP workoutStepCustomTargetValueHighCustomTargetPowerHighMaps[] = +{ + { 4, 3 }, // target_type == power +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryTargetValueSecondaryTargetSpeedZoneMaps[] = +{ + { 0, 19 }, // secondary_target_type == speed +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryTargetValueSecondaryTargetHrZoneMaps[] = +{ + { 1, 19 }, // secondary_target_type == heart_rate +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryTargetValueSecondaryTargetCadenceZoneMaps[] = +{ + { 3, 19 }, // secondary_target_type == cadence +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryTargetValueSecondaryTargetPowerZoneMaps[] = +{ + { 4, 19 }, // secondary_target_type == power +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryTargetValueSecondaryTargetStrokeTypeMaps[] = +{ + { 11, 19 }, // secondary_target_type == swim_stroke +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetSpeedLowMaps[] = +{ + { 0, 19 }, // secondary_target_type == speed +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetHeartRateLowMaps[] = +{ + { 1, 19 }, // secondary_target_type == heart_rate +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetCadenceLowMaps[] = +{ + { 3, 19 }, // secondary_target_type == cadence +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetPowerLowMaps[] = +{ + { 4, 19 }, // secondary_target_type == power +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetSpeedHighMaps[] = +{ + { 0, 19 }, // secondary_target_type == speed +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetHeartRateHighMaps[] = +{ + { 1, 19 }, // secondary_target_type == heart_rate +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetCadenceHighMaps[] = +{ + { 3, 19 }, // secondary_target_type == cadence +}; + +static const Profile::SUBFIELD_MAP workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetPowerHighMaps[] = +{ + { 4, 19 }, // secondary_target_type == power +}; + +static const Profile::SUBFIELD workoutStepDurationValueSubFields[] = +{ + { workoutStepDurationValueDurationTimeMaps, 0, "duration_time", "s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 2, 0, 134 }, + { workoutStepDurationValueDurationDistanceMaps, 0, "duration_distance", "m", (FIT_FLOAT32)100, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepDurationValueDurationHrMaps, 0, "duration_hr", "% or bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 0, 134 }, + { workoutStepDurationValueDurationCaloriesMaps, 0, "duration_calories", "calories", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepDurationValueDurationStepMaps, 0, "duration_step", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 8, 0, 134 }, + { workoutStepDurationValueDurationPowerMaps, 0, "duration_power", "% or watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 0, 134 }, + { workoutStepDurationValueDurationRepsMaps, 0, "duration_reps", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::SUBFIELD workoutStepTargetValueSubFields[] = +{ + { workoutStepTargetValueTargetSpeedZoneMaps, 0, "target_speed_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueTargetHrZoneMaps, 0, "target_hr_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueTargetCadenceZoneMaps, 0, "target_cadence_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueTargetPowerZoneMaps, 0, "target_power_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueRepeatStepsMaps, 0, "repeat_steps", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueRepeatTimeMaps, 0, "repeat_time", "s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueRepeatDistanceMaps, 0, "repeat_distance", "m", (FIT_FLOAT32)100, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueRepeatCaloriesMaps, 0, "repeat_calories", "calories", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepTargetValueRepeatHrMaps, 0, "repeat_hr", "% or bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 0, 134 }, + { workoutStepTargetValueRepeatPowerMaps, 0, "repeat_power", "% or watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 0, 134 }, + { workoutStepTargetValueTargetStrokeTypeMaps, 0, "target_stroke_type", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 0 }, +}; + +static const Profile::SUBFIELD workoutStepCustomTargetValueLowSubFields[] = +{ + { workoutStepCustomTargetValueLowCustomTargetSpeedLowMaps, 0, "custom_target_speed_low", "m/s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepCustomTargetValueLowCustomTargetHeartRateLowMaps, 0, "custom_target_heart_rate_low", "% or bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepCustomTargetValueLowCustomTargetCadenceLowMaps, 0, "custom_target_cadence_low", "rpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepCustomTargetValueLowCustomTargetPowerLowMaps, 0, "custom_target_power_low", "% or watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::SUBFIELD workoutStepCustomTargetValueHighSubFields[] = +{ + { workoutStepCustomTargetValueHighCustomTargetSpeedHighMaps, 0, "custom_target_speed_high", "m/s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepCustomTargetValueHighCustomTargetHeartRateHighMaps, 0, "custom_target_heart_rate_high", "% or bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepCustomTargetValueHighCustomTargetCadenceHighMaps, 0, "custom_target_cadence_high", "rpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepCustomTargetValueHighCustomTargetPowerHighMaps, 0, "custom_target_power_high", "% or watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::SUBFIELD workoutStepSecondaryTargetValueSubFields[] = +{ + { workoutStepSecondaryTargetValueSecondaryTargetSpeedZoneMaps, 0, "secondary_target_speed_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryTargetValueSecondaryTargetHrZoneMaps, 0, "secondary_target_hr_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryTargetValueSecondaryTargetCadenceZoneMaps, 0, "secondary_target_cadence_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryTargetValueSecondaryTargetPowerZoneMaps, 0, "secondary_target_power_zone", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryTargetValueSecondaryTargetStrokeTypeMaps, 0, "secondary_target_stroke_type", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 0 }, +}; + +static const Profile::SUBFIELD workoutStepSecondaryCustomTargetValueLowSubFields[] = +{ + { workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetSpeedLowMaps, 0, "secondary_custom_target_speed_low", "m/s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetHeartRateLowMaps, 0, "secondary_custom_target_heart_rate_low", "% or bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetCadenceLowMaps, 0, "secondary_custom_target_cadence_low", "rpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryCustomTargetValueLowSecondaryCustomTargetPowerLowMaps, 0, "secondary_custom_target_power_low", "% or watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::SUBFIELD workoutStepSecondaryCustomTargetValueHighSubFields[] = +{ + { workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetSpeedHighMaps, 0, "secondary_custom_target_speed_high", "m/s", (FIT_FLOAT32)1000, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetHeartRateHighMaps, 0, "secondary_custom_target_heart_rate_high", "% or bpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetCadenceHighMaps, 0, "secondary_custom_target_cadence_high", "rpm", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, + { workoutStepSecondaryCustomTargetValueHighSecondaryCustomTargetPowerHighMaps, 0, "secondary_custom_target_power_high", "% or watts", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 134 }, +}; + +static const Profile::FIELD workoutStepFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "wkt_step_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 7, false, Profile::Type::String }, +{ 0, 0, "duration_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::WktStepDuration }, +{ 0, workoutStepDurationValueSubFields, "duration_value", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 7, 2, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "target_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::WktStepTarget }, +{ 0, workoutStepTargetValueSubFields, "target_value", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 11, 4, 134, false, Profile::Type::Uint32 }, +{ 0, workoutStepCustomTargetValueLowSubFields, "custom_target_value_low", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 4, 5, 134, false, Profile::Type::Uint32 }, +{ 0, workoutStepCustomTargetValueHighSubFields, "custom_target_value_high", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 4, 6, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "intensity", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::Intensity }, +{ 0, 0, "notes", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 7, false, Profile::Type::String }, +{ 0, 0, "equipment", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 0, false, Profile::Type::WorkoutEquipment }, +{ 0, 0, "exercise_category", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 132, false, Profile::Type::ExerciseCategory }, +{ 0, 0, "exercise_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "exercise_weight", "kg", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 12, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "weight_display_unit", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 13, 132, false, Profile::Type::FitBaseUnit }, +{ 0, 0, "secondary_target_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 0, false, Profile::Type::WktStepTarget }, +{ 0, workoutStepSecondaryTargetValueSubFields, "secondary_target_value", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 5, 20, 134, false, Profile::Type::Uint32 }, +{ 0, workoutStepSecondaryCustomTargetValueLowSubFields, "secondary_custom_target_value_low", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 4, 21, 134, false, Profile::Type::Uint32 }, +{ 0, workoutStepSecondaryCustomTargetValueHighSubFields, "secondary_custom_target_value_high", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 4, 22, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD exerciseTitleFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "exercise_category", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::ExerciseCategory }, +{ 0, 0, "exercise_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "wkt_step_name", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 7, false, Profile::Type::String }, +}; + +static const Profile::SUBFIELD_MAP scheduleProductFaveroProductMaps[] = +{ + { 263, 0 }, // manufacturer == favero_electronics +}; + +static const Profile::SUBFIELD_MAP scheduleProductGarminProductMaps[] = +{ + { 1, 0 }, // manufacturer == garmin + { 15, 0 }, // manufacturer == dynastream + { 13, 0 }, // manufacturer == dynastream_oem + { 89, 0 }, // manufacturer == tacx +}; + +static const Profile::SUBFIELD scheduleProductSubFields[] = +{ + { scheduleProductFaveroProductMaps, 0, "favero_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 1, 0, 132 }, + { scheduleProductGarminProductMaps, 0, "garmin_product", "", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 4, 0, 132 }, +}; + +static const Profile::FIELD scheduleFields[] = +{ +{ 0, 0, "manufacturer", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Manufacturer }, +{ 0, scheduleProductSubFields, "product", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 2, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "serial_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 140, false, Profile::Type::Uint32z }, +{ 0, 0, "time_created", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::DateTime }, +{ 0, 0, "completed", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::Bool }, +{ 0, 0, "type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::Schedule }, +{ 0, 0, "scheduled_time", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 134, false, Profile::Type::LocalDateTime }, +}; + +static const Profile::FIELD totalsFields[] = +{ +{ 0, 0, "message_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 254, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "timer_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "distance", "m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "sport", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::Sport }, +{ 0, 0, "elapsed_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "sessions", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "active_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "sport_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 2, false, Profile::Type::Uint8 }, +}; + +static const Profile::FIELD weightScaleFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "weight", "kg", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Weight }, +{ 0, 0, "percent_fat", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "percent_hydration", "%", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "visceral_fat_mass", "kg", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "bone_mass", "kg", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "muscle_mass", "kg", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "basal_met", "kcal/day", (FIT_FLOAT64)4, (FIT_FLOAT64)0, 0, 0, 7, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "physique_rating", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "active_met", "kcal/day", (FIT_FLOAT64)4, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "metabolic_age", "years", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "visceral_fat_rating", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "user_profile_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 12, 132, false, Profile::Type::MessageIndex }, +}; + +static const Profile::FIELD bloodPressureFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "systolic_pressure", "mmHg", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "diastolic_pressure", "mmHg", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "mean_arterial_pressure", "mmHg", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "map_3_sample_mean", "mmHg", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "map_morning_values", "mmHg", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "map_evening_values", "mmHg", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "heart_rate_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::HrType }, +{ 0, 0, "status", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 0, false, Profile::Type::BpStatus }, +{ 0, 0, "user_profile_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::MessageIndex }, +}; + +static const Profile::FIELD monitoringInfoFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "local_timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 134, false, Profile::Type::LocalDateTime }, +{ 0, 0, "activity_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 0, false, Profile::Type::ActivityType }, +{ 0, 0, "cycles_to_distance", "m/cycle", (FIT_FLOAT64)5000, (FIT_FLOAT64)0, 0, 0, 3, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "cycles_to_calories", "kcal/cycle", (FIT_FLOAT64)5000, (FIT_FLOAT64)0, 0, 0, 4, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "resting_metabolic_rate", "kcal / day", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD_COMPONENT monitoringCurrentActivityTypeIntensityComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 5, 5, FIT_FALSE }, // activity_type + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 28, 3, FIT_FALSE }, // intensity +}; + +static const Profile::SUBFIELD_MAP monitoringCyclesStepsMaps[] = +{ + { 6, 5 }, // activity_type == walking + { 1, 5 }, // activity_type == running +}; + +static const Profile::SUBFIELD_MAP monitoringCyclesStrokesMaps[] = +{ + { 2, 5 }, // activity_type == cycling + { 5, 5 }, // activity_type == swimming +}; + +static const Profile::SUBFIELD monitoringCyclesSubFields[] = +{ + { monitoringCyclesStepsMaps, 0, "steps", "steps", (FIT_FLOAT32)1, (FIT_FLOAT32)0, 2, 0, 134 }, + { monitoringCyclesStrokesMaps, 0, "strokes", "strokes", (FIT_FLOAT32)2, (FIT_FLOAT32)0, 2, 0, 134 }, +}; + +static const Profile::FIELD monitoringFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "device_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::DeviceIndex }, +{ 0, 0, "calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "distance", "m", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +{ 0, monitoringCyclesSubFields, "cycles", "cycles", (FIT_FLOAT64)2, (FIT_FLOAT64)0, 0, 2, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "active_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "activity_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 0, false, Profile::Type::ActivityType }, +{ 0, 0, "activity_subtype", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 0, false, Profile::Type::ActivitySubtype }, +{ 0, 0, "activity_level", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 0, false, Profile::Type::ActivityLevel }, +{ 0, 0, "distance_16", "100 * m", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "cycles_16", "2 * cycles (steps)", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "active_time_16", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "local_timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 134, false, Profile::Type::LocalDateTime }, +{ 0, 0, "temperature", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 12, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "temperature_min", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 14, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "temperature_max", "C", (FIT_FLOAT64)100, (FIT_FLOAT64)0, 0, 0, 15, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "activity_time", "minutes", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 16, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "active_calories", "kcal", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 19, 132, false, Profile::Type::Uint16 }, +{ monitoringCurrentActivityTypeIntensityComponents, 0, "current_activity_type_intensity", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 2, 0, 24, 13, false, Profile::Type::Byte }, +{ 0, 0, "timestamp_min_8", "min", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 25, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "timestamp_16", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 26, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "heart_rate", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 27, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "intensity", "", (FIT_FLOAT64)10, (FIT_FLOAT64)0, 0, 0, 28, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "duration_min", "min", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 29, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "duration", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 30, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "ascent", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 31, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "descent", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 32, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "moderate_activity_minutes", "minutes", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 33, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "vigorous_activity_minutes", "minutes", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 34, 132, false, Profile::Type::Uint16 }, +}; + +static const Profile::FIELD_COMPONENT hrTime256Components[] = +{ + { (FIT_FLOAT64)256, (FIT_FLOAT64)0, 0, 8, FIT_FALSE }, // fractional_timestamp +}; + +static const Profile::FIELD_COMPONENT hrEventTimestamp12Components[] = +{ + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp + { (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 9, 12, FIT_TRUE }, // event_timestamp +}; + +static const Profile::FIELD hrFields[] = +{ +{ 0, 0, "timestamp", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "fractional_timestamp", "s", (FIT_FLOAT64)32768, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ hrTime256Components, 0, "time256", "s", (FIT_FLOAT64)256, (FIT_FLOAT64)0, 1, 0, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "filtered_bpm", "bpm", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "event_timestamp", "s", (FIT_FLOAT64)1024, (FIT_FLOAT64)0, 0, 0, 9, 134, true, Profile::Type::Uint32 }, +{ hrEventTimestamp12Components, 0, "event_timestamp_12", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 10, 0, 10, 13, false, Profile::Type::Byte }, +}; + +static const Profile::FIELD stressLevelFields[] = +{ +{ 0, 0, "stress_level_value", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 131, false, Profile::Type::Sint16 }, +{ 0, 0, "stress_level_time", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 134, false, Profile::Type::DateTime }, +}; + +static const Profile::FIELD memoGlobFields[] = +{ +{ 0, 0, "part_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 250, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "memo", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 13, false, Profile::Type::Byte }, +{ 0, 0, "mesg_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::MesgNum }, +{ 0, 0, "parent_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "field_num", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "data", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 10, false, Profile::Type::Uint8z }, +}; + +static const Profile::FIELD antChannelIdFields[] = +{ +{ 0, 0, "channel_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "device_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "device_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 139, false, Profile::Type::Uint16z }, +{ 0, 0, "transmission_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 10, false, Profile::Type::Uint8z }, +{ 0, 0, "device_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 2, false, Profile::Type::DeviceIndex }, +}; + +static const Profile::FIELD_COMPONENT antRxMesgDataComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 3, 8, FIT_FALSE }, // channel_number + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data +}; + +static const Profile::FIELD antRxFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "fractional_timestamp", "s", (FIT_FLOAT64)32768, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "mesg_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 13, false, Profile::Type::Byte }, +{ antRxMesgDataComponents, 0, "mesg_data", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 9, 0, 2, 13, false, Profile::Type::Byte }, +{ 0, 0, "channel_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "data", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 13, false, Profile::Type::Byte }, +}; + +static const Profile::FIELD_COMPONENT antTxMesgDataComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 3, 8, FIT_FALSE }, // channel_number + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 4, 8, FIT_FALSE }, // data +}; + +static const Profile::FIELD antTxFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "fractional_timestamp", "s", (FIT_FLOAT64)32768, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "mesg_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 13, false, Profile::Type::Byte }, +{ antTxMesgDataComponents, 0, "mesg_data", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 9, 0, 2, 13, false, Profile::Type::Byte }, +{ 0, 0, "channel_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "data", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 13, false, Profile::Type::Byte }, +}; + +static const Profile::FIELD exdScreenConfigurationFields[] = +{ +{ 0, 0, "screen_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "field_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "layout", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 0, false, Profile::Type::ExdLayout }, +{ 0, 0, "screen_enabled", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 0, false, Profile::Type::Bool }, +}; + +static const Profile::FIELD_COMPONENT exdDataFieldConfigurationConceptFieldComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 2, 4, FIT_FALSE }, // field_id + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 3, 4, FIT_FALSE }, // concept_count +}; + +static const Profile::FIELD exdDataFieldConfigurationFields[] = +{ +{ 0, 0, "screen_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ exdDataFieldConfigurationConceptFieldComponents, 0, "concept_field", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 2, 0, 1, 13, false, Profile::Type::Byte }, +{ 0, 0, "field_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "concept_count", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "display_type", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 0, false, Profile::Type::ExdDisplayType }, +{ 0, 0, "title", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 7, false, Profile::Type::String }, +}; + +static const Profile::FIELD_COMPONENT exdDataConceptConfigurationConceptFieldComponents[] = +{ + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 2, 4, FIT_FALSE }, // field_id + { (FIT_FLOAT64)1, (FIT_FLOAT64)0, 3, 4, FIT_FALSE }, // concept_index +}; + +static const Profile::FIELD exdDataConceptConfigurationFields[] = +{ +{ 0, 0, "screen_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 2, false, Profile::Type::Uint8 }, +{ exdDataConceptConfigurationConceptFieldComponents, 0, "concept_field", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 2, 0, 1, 13, false, Profile::Type::Byte }, +{ 0, 0, "field_id", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 2, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "concept_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 3, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "data_page", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "concept_key", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "scaling", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "data_units", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 0, false, Profile::Type::ExdDataUnits }, +{ 0, 0, "qualifier", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 0, false, Profile::Type::ExdQualifiers }, +{ 0, 0, "descriptor", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 0, false, Profile::Type::ExdDescriptors }, +{ 0, 0, "is_signed", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 11, 0, false, Profile::Type::Bool }, +}; + +static const Profile::FIELD diveSummaryFields[] = +{ +{ 0, 0, "timestamp", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 253, 134, false, Profile::Type::DateTime }, +{ 0, 0, "reference_mesg", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::MesgNum }, +{ 0, 0, "reference_index", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 1, 132, false, Profile::Type::MessageIndex }, +{ 0, 0, "avg_depth", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 2, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "max_depth", "m", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 3, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "surface_interval", "s", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 4, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "start_cns", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 5, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "end_cns", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 6, 2, false, Profile::Type::Uint8 }, +{ 0, 0, "start_n2", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 7, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "end_n2", "percent", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 8, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "o2_toxicity", "OTUs", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 9, 132, false, Profile::Type::Uint16 }, +{ 0, 0, "dive_number", "", (FIT_FLOAT64)1, (FIT_FLOAT64)0, 0, 0, 10, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "bottom_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 11, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "avg_ascent_rate", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 17, 133, false, Profile::Type::Sint32 }, +{ 0, 0, "avg_descent_rate", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 22, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "max_ascent_rate", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 23, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "max_descent_rate", "m/s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 24, 134, false, Profile::Type::Uint32 }, +{ 0, 0, "hang_time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 25, 134, false, Profile::Type::Uint32 }, +}; + +static const Profile::FIELD hrvFields[] = +{ +{ 0, 0, "time", "s", (FIT_FLOAT64)1000, (FIT_FLOAT64)0, 0, 0, 0, 132, false, Profile::Type::Uint16 }, +}; + +const Profile::MESG Profile::mesgs[MESGS] = +{ + { fileIdFields, "file_id", FIT_MESG_NUM_FILE_ID, 7 }, + { fileCreatorFields, "file_creator", FIT_MESG_NUM_FILE_CREATOR, 2 }, + { timestampCorrelationFields, "timestamp_correlation", FIT_MESG_NUM_TIMESTAMP_CORRELATION, 7 }, + { softwareFields, "software", FIT_MESG_NUM_SOFTWARE, 3 }, + { slaveDeviceFields, "slave_device", FIT_MESG_NUM_SLAVE_DEVICE, 2 }, + { capabilitiesFields, "capabilities", FIT_MESG_NUM_CAPABILITIES, 4 }, + { fileCapabilitiesFields, "file_capabilities", FIT_MESG_NUM_FILE_CAPABILITIES, 6 }, + { mesgCapabilitiesFields, "mesg_capabilities", FIT_MESG_NUM_MESG_CAPABILITIES, 5 }, + { fieldCapabilitiesFields, "field_capabilities", FIT_MESG_NUM_FIELD_CAPABILITIES, 5 }, + { deviceSettingsFields, "device_settings", FIT_MESG_NUM_DEVICE_SETTINGS, 24 }, + { userProfileFields, "user_profile", FIT_MESG_NUM_USER_PROFILE, 29 }, + { hrmProfileFields, "hrm_profile", FIT_MESG_NUM_HRM_PROFILE, 5 }, + { sdmProfileFields, "sdm_profile", FIT_MESG_NUM_SDM_PROFILE, 8 }, + { bikeProfileFields, "bike_profile", FIT_MESG_NUM_BIKE_PROFILE, 32 }, + { connectivityFields, "connectivity", FIT_MESG_NUM_CONNECTIVITY, 13 }, + { watchfaceSettingsFields, "watchface_settings", FIT_MESG_NUM_WATCHFACE_SETTINGS, 3 }, + { ohrSettingsFields, "ohr_settings", FIT_MESG_NUM_OHR_SETTINGS, 2 }, + { zonesTargetFields, "zones_target", FIT_MESG_NUM_ZONES_TARGET, 5 }, + { sportFields, "sport", FIT_MESG_NUM_SPORT, 3 }, + { hrZoneFields, "hr_zone", FIT_MESG_NUM_HR_ZONE, 3 }, + { speedZoneFields, "speed_zone", FIT_MESG_NUM_SPEED_ZONE, 3 }, + { cadenceZoneFields, "cadence_zone", FIT_MESG_NUM_CADENCE_ZONE, 3 }, + { powerZoneFields, "power_zone", FIT_MESG_NUM_POWER_ZONE, 3 }, + { metZoneFields, "met_zone", FIT_MESG_NUM_MET_ZONE, 4 }, + { diveSettingsFields, "dive_settings", FIT_MESG_NUM_DIVE_SETTINGS, 22 }, + { diveAlarmFields, "dive_alarm", FIT_MESG_NUM_DIVE_ALARM, 7 }, + { diveGasFields, "dive_gas", FIT_MESG_NUM_DIVE_GAS, 4 }, + { goalFields, "goal", FIT_MESG_NUM_GOAL, 13 }, + { activityFields, "activity", FIT_MESG_NUM_ACTIVITY, 8 }, + { sessionFields, "session", FIT_MESG_NUM_SESSION, 131 }, + { lapFields, "lap", FIT_MESG_NUM_LAP, 116 }, + { lengthFields, "length", FIT_MESG_NUM_LENGTH, 18 }, + { recordFields, "record", FIT_MESG_NUM_RECORD, 74 }, + { eventFields, "event", FIT_MESG_NUM_EVENT, 17 }, + { deviceInfoFields, "device_info", FIT_MESG_NUM_DEVICE_INFO, 19 }, + { deviceAuxBatteryInfoFields, "device_aux_battery_info", FIT_MESG_NUM_DEVICE_AUX_BATTERY_INFO, 5 }, + { trainingFileFields, "training_file", FIT_MESG_NUM_TRAINING_FILE, 6 }, + { weatherConditionsFields, "weather_conditions", FIT_MESG_NUM_WEATHER_CONDITIONS, 16 }, + { weatherAlertFields, "weather_alert", FIT_MESG_NUM_WEATHER_ALERT, 6 }, + { gpsMetadataFields, "gps_metadata", FIT_MESG_NUM_GPS_METADATA, 9 }, + { cameraEventFields, "camera_event", FIT_MESG_NUM_CAMERA_EVENT, 5 }, + { gyroscopeDataFields, "gyroscope_data", FIT_MESG_NUM_GYROSCOPE_DATA, 9 }, + { accelerometerDataFields, "accelerometer_data", FIT_MESG_NUM_ACCELEROMETER_DATA, 12 }, + { magnetometerDataFields, "magnetometer_data", FIT_MESG_NUM_MAGNETOMETER_DATA, 9 }, + { barometerDataFields, "barometer_data", FIT_MESG_NUM_BAROMETER_DATA, 4 }, + { threeDSensorCalibrationFields, "three_d_sensor_calibration", FIT_MESG_NUM_THREE_D_SENSOR_CALIBRATION, 7 }, + { oneDSensorCalibrationFields, "one_d_sensor_calibration", FIT_MESG_NUM_ONE_D_SENSOR_CALIBRATION, 6 }, + { videoFrameFields, "video_frame", FIT_MESG_NUM_VIDEO_FRAME, 3 }, + { obdiiDataFields, "obdii_data", FIT_MESG_NUM_OBDII_DATA, 9 }, + { nmeaSentenceFields, "nmea_sentence", FIT_MESG_NUM_NMEA_SENTENCE, 3 }, + { aviationAttitudeFields, "aviation_attitude", FIT_MESG_NUM_AVIATION_ATTITUDE, 12 }, + { videoFields, "video", FIT_MESG_NUM_VIDEO, 3 }, + { videoTitleFields, "video_title", FIT_MESG_NUM_VIDEO_TITLE, 3 }, + { videoDescriptionFields, "video_description", FIT_MESG_NUM_VIDEO_DESCRIPTION, 3 }, + { videoClipFields, "video_clip", FIT_MESG_NUM_VIDEO_CLIP, 7 }, + { setFields, "set", FIT_MESG_NUM_SET, 11 }, + { jumpFields, "jump", FIT_MESG_NUM_JUMP, 10 }, + { climbProFields, "climb_pro", FIT_MESG_NUM_CLIMB_PRO, 7 }, + { fieldDescriptionFields, "field_description", FIT_MESG_NUM_FIELD_DESCRIPTION, 14 }, + { developerDataIdFields, "developer_data_id", FIT_MESG_NUM_DEVELOPER_DATA_ID, 5 }, + { courseFields, "course", FIT_MESG_NUM_COURSE, 4 }, + { coursePointFields, "course_point", FIT_MESG_NUM_COURSE_POINT, 8 }, + { segmentIdFields, "segment_id", FIT_MESG_NUM_SEGMENT_ID, 9 }, + { segmentLeaderboardEntryFields, "segment_leaderboard_entry", FIT_MESG_NUM_SEGMENT_LEADERBOARD_ENTRY, 7 }, + { segmentPointFields, "segment_point", FIT_MESG_NUM_SEGMENT_POINT, 6 }, + { segmentLapFields, "segment_lap", FIT_MESG_NUM_SEGMENT_LAP, 92 }, + { segmentFileFields, "segment_file", FIT_MESG_NUM_SEGMENT_FILE, 9 }, + { workoutFields, "workout", FIT_MESG_NUM_WORKOUT, 7 }, + { workoutSessionFields, "workout_session", FIT_MESG_NUM_WORKOUT_SESSION, 7 }, + { workoutStepFields, "workout_step", FIT_MESG_NUM_WORKOUT_STEP, 19 }, + { exerciseTitleFields, "exercise_title", FIT_MESG_NUM_EXERCISE_TITLE, 4 }, + { scheduleFields, "schedule", FIT_MESG_NUM_SCHEDULE, 7 }, + { totalsFields, "totals", FIT_MESG_NUM_TOTALS, 10 }, + { weightScaleFields, "weight_scale", FIT_MESG_NUM_WEIGHT_SCALE, 13 }, + { bloodPressureFields, "blood_pressure", FIT_MESG_NUM_BLOOD_PRESSURE, 11 }, + { monitoringInfoFields, "monitoring_info", FIT_MESG_NUM_MONITORING_INFO, 6 }, + { monitoringFields, "monitoring", FIT_MESG_NUM_MONITORING, 29 }, + { hrFields, "hr", FIT_MESG_NUM_HR, 6 }, + { stressLevelFields, "stress_level", FIT_MESG_NUM_STRESS_LEVEL, 2 }, + { memoGlobFields, "memo_glob", FIT_MESG_NUM_MEMO_GLOB, 6 }, + { antChannelIdFields, "ant_channel_id", FIT_MESG_NUM_ANT_CHANNEL_ID, 5 }, + { antRxFields, "ant_rx", FIT_MESG_NUM_ANT_RX, 6 }, + { antTxFields, "ant_tx", FIT_MESG_NUM_ANT_TX, 6 }, + { exdScreenConfigurationFields, "exd_screen_configuration", FIT_MESG_NUM_EXD_SCREEN_CONFIGURATION, 4 }, + { exdDataFieldConfigurationFields, "exd_data_field_configuration", FIT_MESG_NUM_EXD_DATA_FIELD_CONFIGURATION, 6 }, + { exdDataConceptConfigurationFields, "exd_data_concept_configuration", FIT_MESG_NUM_EXD_DATA_CONCEPT_CONFIGURATION, 11 }, + { diveSummaryFields, "dive_summary", FIT_MESG_NUM_DIVE_SUMMARY, 18 }, + { hrvFields, "hrv", FIT_MESG_NUM_HRV, 1 }, + { NULL, "pad", FIT_MESG_NUM_PAD, 0 }, +}; + +const Profile::MESG* Profile::GetMesg(const FIT_UINT16 num) +{ + for (int i = 0; i < MESGS; i++) + { + if (mesgs[i].num == num) + return &mesgs[i]; + } + + return NULL; +} + +const Profile::MESG* Profile::GetMesg(const std::string& name) +{ + for (int i = 0; i < MESGS; i++) + { + if (mesgs[i].name == name) + return &mesgs[i]; + } + + return NULL; +} + +const FIT_UINT16 Profile::GetFieldIndex(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum) +{ + const MESG *mesg = GetMesg(mesgNum); + + if (mesg == NULL) + return FIT_UINT16_INVALID; + + for (FIT_UINT16 i = 0; i < mesg->numFields; i++) + { + if (mesg->fields[i].num == fieldNum) + return i; + } + + return FIT_UINT16_INVALID; +} + +const FIT_UINT16 Profile::GetFieldIndex(const std::string& mesgName, const std::string& fieldName) +{ + const MESG *mesg = GetMesg(mesgName); + + if (mesg == NULL) + return FIT_UINT16_INVALID; + + for (FIT_UINT16 i = 0; i < mesg->numFields; i++) + { + if (mesg->fields[i].name == fieldName) + return i; + + for (FIT_UINT16 j = 0; j < mesg->fields[i].numSubFields; j++) + { + if (mesg->fields[i].subFields[j].name == fieldName) + return i; + } + } + + return FIT_UINT16_INVALID; +} + +const Profile::FIELD* Profile::GetField(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum) +{ + const MESG *mesg = GetMesg(mesgNum); + + if (mesg == NULL) + return NULL; + + FIT_UINT16 fieldIndex = GetFieldIndex(mesgNum, fieldNum); + + if (fieldIndex >= mesg->numFields) + return NULL; + + return &(mesg->fields[fieldIndex]); +} + +const Profile::FIELD* Profile::GetField(const std::string& mesgName, const std::string& fieldName) +{ + const MESG *mesg = GetMesg(mesgName); + + if (mesg == NULL) + return NULL; + + FIT_UINT16 fieldIndex = GetFieldIndex(mesgName, fieldName); + + if (fieldIndex >= mesg->numFields) + return NULL; + + return &(mesg->fields[fieldIndex]); +} + +const FIT_UINT16 Profile::GetSubFieldIndex(const std::string& mesgName, const std::string& fieldName, const std::string& subFieldName) +{ + const FIELD *field = GetField(mesgName, fieldName); + + if (field == NULL) + return FIT_SUBFIELD_INDEX_MAIN_FIELD; + + for (FIT_UINT16 i = 0; i < field->numSubFields; i++) + { + if (field->subFields[i].name == subFieldName) + return i; + } + + return FIT_SUBFIELD_INDEX_MAIN_FIELD; +} + +const Profile::SUBFIELD* Profile::GetSubField(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum, const FIT_UINT16 subFieldIndex) +{ + const MESG *mesg = GetMesg(mesgNum); + + if (mesg == NULL) + return NULL; + + FIT_UINT16 fieldIndex = GetFieldIndex(mesgNum, fieldNum); + + if (fieldIndex >= mesg->numFields) + return NULL; + + if (subFieldIndex >= mesg->fields[fieldIndex].numSubFields) + return NULL; + + return &(mesg->fields[fieldIndex].subFields[subFieldIndex]); +} + +const Profile::SUBFIELD* Profile::GetSubField(const std::string& mesgName, const std::string& fieldName, const std::string& subFieldName) +{ + const MESG *mesg = GetMesg(mesgName); + + if (mesg == NULL) + return NULL; + + FIT_UINT16 fieldIndex = GetFieldIndex(mesgName, fieldName); + + if (fieldIndex >= mesg->numFields) + return NULL; + + FIT_UINT16 subFieldIndex = GetSubFieldIndex(mesgName, fieldName, subFieldName); + + if (subFieldIndex >= mesg->fields[fieldIndex].numSubFields) + return NULL; + + return &(mesg->fields[fieldIndex].subFields[subFieldIndex]); +} + +} // namespace fit + diff --git a/Sources/cppfit/fit_protocol_validator.cpp b/Sources/cppfit/fit_protocol_validator.cpp new file mode 100644 index 0000000..1ed97a0 --- /dev/null +++ b/Sources/cppfit/fit_protocol_validator.cpp @@ -0,0 +1,94 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_mesg.hpp" +#include "fit_mesg_definition.hpp" +#include "fit_protocol_validator.hpp" + +fit::ProtocolValidator::ProtocolValidator( ProtocolVersion version ) + : validator( nullptr ) +{ + switch ( version ) + { + case ProtocolVersion::V10: + validator = new V1Validator(); + break; + + case ProtocolVersion::V20: + default: + break; + } +} + +fit::ProtocolValidator::~ProtocolValidator() +{ + if ( nullptr != validator ) + { + delete validator; + } +} + +bool fit::ProtocolValidator::ValidateMesg( const Mesg& mesg ) +{ + if ( nullptr == validator ) return true; + return validator->ValidateMesg( mesg ); +} + +bool fit::ProtocolValidator::ValidateMesgDefn( const MesgDefinition& defn ) +{ + if ( nullptr == validator ) return true; + return validator->ValidateMesgDefn( defn ); +} + +bool fit::V1Validator::ValidateMesg( const Mesg& mesg ) +{ + if ( mesg.GetDeveloperFields().size() != 0 ) + { + return false; + } + + for ( FIT_UINT16 i = 0; i < mesg.GetNumFields(); i++ ) + { + const Field* fld = mesg.GetFieldByIndex( i ); + FIT_UINT8 typeNum = fld->GetType() & FIT_BASE_TYPE_NUM_MASK; + + // V2 introduces 64 bit types. + if ( typeNum > ( FIT_BASE_TYPE_BYTE & FIT_BASE_TYPE_NUM_MASK ) ) + { + return false; + } + } + + return true; +} + +bool fit::V1Validator::ValidateMesgDefn( const MesgDefinition& defn ) +{ + if ( defn.GetDevFields().size() != 0 ) + { + return false; + } + + for ( auto fld : defn.GetFields() ) + { + FIT_UINT8 typeNum = fld.GetType() & FIT_BASE_TYPE_NUM_MASK; + + // V2 introduces 64 bit types. + if ( typeNum > ( FIT_BASE_TYPE_BYTE & FIT_BASE_TYPE_NUM_MASK ) ) + { + return false; + } + } + + return true; +} + diff --git a/Sources/cppfit/fit_unicode.cpp b/Sources/cppfit/fit_unicode.cpp new file mode 100644 index 0000000..84b1cb0 --- /dev/null +++ b/Sources/cppfit/fit_unicode.cpp @@ -0,0 +1,388 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#include "fit_config.hpp" +#include "fit_runtime_exception.hpp" +#include "fit_unicode.hpp" + +/////////////////////////////////////////////////////////////////////// +// Private Definitions +/////////////////////////////////////////////////////////////////////// + +// Encoding types. +typedef FIT_ENUM FIT_UNICODE_ENCODING; +#define FIT_UNICODE_ENCODING_UTF8 ((FIT_UNICODE_ENCODING)0) +#define FIT_UNICODE_ENCODING_UTF16 ((FIT_UNICODE_ENCODING)1) +#define FIT_UNICODE_ENCODING_UTF32 ((FIT_UNICODE_ENCODING)2) +#define FIT_UNICODE_ENCODING_INVALID FIT_ENUM_INVALID +#define FIT_UNICODE_ENCODING_COUNT 3 + +#if (FIT_WIDE_CHAR_SIZE == 1) +#define INTERNAL_UNICODE_ENCODING FIT_UNICODE_ENCODING_UTF8 +#elif (FIT_WIDE_CHAR_SIZE == 2) +#define INTERNAL_UNICODE_ENCODING FIT_UNICODE_ENCODING_UTF16 +#elif (FIT_WIDE_CHAR_SIZE == 4) +#define INTERNAL_UNICODE_ENCODING FIT_UNICODE_ENCODING_UTF32 +#else + #error "Wide character size not specified as 1, 2 or 4 bytes." +#endif + +// Conversion error codes. +typedef FIT_ENUM FIT_STRING_CONVERSION_ERROR; +#define FIT_STRING_CONVERSION_ERROR_UNICODE_INVALID_POINT ((FIT_STRING_CONVERSION_ERROR)0) +#define FIT_STRING_CONVERSION_ERROR_UNICODE_UNDEFINED_SOURCE_ENCODING ((FIT_STRING_CONVERSION_ERROR)1) +#define FIT_STRING_CONVERSION_ERROR_UNICODE_UNDEFINED_DESTINATION_ENCODING ((FIT_STRING_CONVERSION_ERROR)2) +#define FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_UNIT ((FIT_STRING_CONVERSION_ERROR)3) +#define FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_LEAD_UNIT ((FIT_STRING_CONVERSION_ERROR)4) +#define FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_CONTINUATION_UNIT ((FIT_STRING_CONVERSION_ERROR)5) +#define FIT_STRING_CONVERSION_ERROR_UTF8_NON_CONTINUATION_UNIT ((FIT_STRING_CONVERSION_ERROR)6) +#define FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_1 ((FIT_STRING_CONVERSION_ERROR)7) +#define FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_2 ((FIT_STRING_CONVERSION_ERROR)8) +#define FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_3 ((FIT_STRING_CONVERSION_ERROR)9) +#define FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_4 ((FIT_STRING_CONVERSION_ERROR)10) +#define FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_NUM_UNITS ((FIT_STRING_CONVERSION_ERROR)11) +#define FIT_STRING_CONVERSION_ERROR_UTF8_END_OF_STRING ((FIT_STRING_CONVERSION_ERROR)12) +#define FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_UNIT ((FIT_STRING_CONVERSION_ERROR)13) +#define FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_LEAD_UNIT ((FIT_STRING_CONVERSION_ERROR)14) +#define FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_TAIL_UNIT ((FIT_STRING_CONVERSION_ERROR)15) +#define FIT_STRING_CONVERSION_ERROR_UTF16_NON_TAIL_UNIT ((FIT_STRING_CONVERSION_ERROR)16) +#define FIT_STRING_CONVERSION_ERROR_UTF16_OVERENCODED_POINT_1 ((FIT_STRING_CONVERSION_ERROR)17) +#define FIT_STRING_CONVERSION_ERROR_UTF16_OVERENCODED_POINT_2 ((FIT_STRING_CONVERSION_ERROR)18) +#define FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_NUM_UNITS ((FIT_STRING_CONVERSION_ERROR)19) +#define FIT_STRING_CONVERSION_ERROR_UTF16_END_OF_STRING ((FIT_STRING_CONVERSION_ERROR)20) +#define FIT_STRING_CONVERSION_ERROR_UTF32_INVALID_UNIT ((FIT_STRING_CONVERSION_ERROR)21) +#define FIT_STRING_CONVERSION_ERROR_INVALID FIT_ENUM_INVALID +#define FIT_STRING_CONVERSION_ERROR_COUNT 22 + +// General Unicode. +typedef unsigned long int FIT_LARGE_TYPE; +#define UNICODE_IS_POINT_VALID(POINT) ((((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x00D7FF) || (((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) >= (FIT_LARGE_TYPE)0x00E000)) && (((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x10FFFF)) ? (FIT_TRUE) : (FIT_FALSE)) + +// UTF-8 encoding. +#define UTF8_IS_UNIT_VALID(UNIT) (((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFF) != (FIT_LARGE_TYPE)0xC0) && (((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFF) != (FIT_LARGE_TYPE)0xC1) && (((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFF) <= (FIT_LARGE_TYPE)0xF4)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_UNIT_1UNIT(UNIT) ((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0x80) == (FIT_LARGE_TYPE)0x00) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_UNIT_2UNIT_LEAD(UNIT) ((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xE0) == (FIT_LARGE_TYPE)0xC0) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_UNIT_3UNIT_LEAD(UNIT) ((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xF0) == (FIT_LARGE_TYPE)0xE0) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_UNIT_4UNIT_LEAD(UNIT) ((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xF8) == (FIT_LARGE_TYPE)0xF0) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_UNIT_MULTI_CONT(UNIT) ((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xC0) == (FIT_LARGE_TYPE)0x80) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_POINT_1UNIT(POINT) (((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x00007F)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_POINT_2UNIT(POINT) (((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) >= (FIT_LARGE_TYPE)0x000080) && (((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x0007FF)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_POINT_3UNIT(POINT) (((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) >= (FIT_LARGE_TYPE)0x000800) && (((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x00FFFF)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_IS_POINT_4UNIT(POINT) (((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) >= (FIT_LARGE_TYPE)0x010000) && (((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x10FFFF)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF8_1UNIT_TO_POINT(UNIT) ((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0x7F) << 0)) +#define UTF8_2UNIT_TO_POINT(LEAD,C1) ((((FIT_LARGE_TYPE)(LEAD) & (FIT_LARGE_TYPE)0x1F) << 6) | (((FIT_LARGE_TYPE)(C1) & (FIT_LARGE_TYPE)0x3F) << 0)) +#define UTF8_3UNIT_TO_POINT(LEAD,C1,C2) ((((FIT_LARGE_TYPE)(LEAD) & (FIT_LARGE_TYPE)0x0F) << 12) | (((FIT_LARGE_TYPE)(C1) & (FIT_LARGE_TYPE)0x3F) << 6) | (((FIT_LARGE_TYPE)(C2) & (FIT_LARGE_TYPE)0x3F) << 0)) +#define UTF8_4UNIT_TO_POINT(LEAD,C1,C2,C3) ((((FIT_LARGE_TYPE)(LEAD) & (FIT_LARGE_TYPE)0x07) << 18) | (((FIT_LARGE_TYPE)(C1) & (FIT_LARGE_TYPE)0x3F) << 12) | (((FIT_LARGE_TYPE)(C2) & (FIT_LARGE_TYPE)0x3F) << 6) | (((FIT_LARGE_TYPE)(C3) & (FIT_LARGE_TYPE)0x3F) << 0)) +#define UTF8_POINT_TO_1UNIT(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 0) & (FIT_LARGE_TYPE)0x7F) | (FIT_LARGE_TYPE)0x00) +#define UTF8_POINT_TO_2UNIT_LEAD(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 6) & (FIT_LARGE_TYPE)0x1F) | (FIT_LARGE_TYPE)0xC0) +#define UTF8_POINT_TO_2UNIT_CONT1(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 0) & (FIT_LARGE_TYPE)0x3F) | (FIT_LARGE_TYPE)0x80) +#define UTF8_POINT_TO_3UNIT_LEAD(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 12) & (FIT_LARGE_TYPE)0x0F) | (FIT_LARGE_TYPE)0xE0) +#define UTF8_POINT_TO_3UNIT_CONT1(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 6) & (FIT_LARGE_TYPE)0x3F) | (FIT_LARGE_TYPE)0x80) +#define UTF8_POINT_TO_3UNIT_CONT2(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 0) & (FIT_LARGE_TYPE)0x3F) | (FIT_LARGE_TYPE)0x80) +#define UTF8_POINT_TO_4UNIT_LEAD(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 18) & (FIT_LARGE_TYPE)0x07) | (FIT_LARGE_TYPE)0xF0) +#define UTF8_POINT_TO_4UNIT_CONT1(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 12) & (FIT_LARGE_TYPE)0x3F) | (FIT_LARGE_TYPE)0x80) +#define UTF8_POINT_TO_4UNIT_CONT2(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 6) & (FIT_LARGE_TYPE)0x3F) | (FIT_LARGE_TYPE)0x80) +#define UTF8_POINT_TO_4UNIT_CONT3(POINT) ((((FIT_LARGE_TYPE)(POINT) >> 0) & (FIT_LARGE_TYPE)0x3F) | (FIT_LARGE_TYPE)0x80) + +// UTF-16 encoding. +// Using unicode version 8.0 D91, http://www.unicode.org/versions/Unicode8.0.0/ch03.pdf +// Isolated code units in the range D800..DFFF are ill formed. +// Any UTF 32 code unit > 10FFFF is ill formed. +// This check is already performed by UNICODE_IS_POINT_VALID macro +#define UTF16_IS_UNIT_VALID(UNIT) (UNICODE_IS_POINT_VALID(UNIT)) +#define UTF16_IS_UNIT_1UNIT(UNIT) (((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFFFF)<= (FIT_LARGE_TYPE)0xD7FF) || (((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFFFF)>= (FIT_LARGE_TYPE)0xE000)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF16_IS_UNIT_2UNIT_LEAD(UNIT) (((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFFFF)>= (FIT_LARGE_TYPE)0xD800) && (((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFFFF)<= (FIT_LARGE_TYPE)0xDBFF)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF16_IS_UNIT_2UNIT_TAIL(UNIT) (((((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFFFF)>= (FIT_LARGE_TYPE)0xDC00) && (((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFFFF)<= (FIT_LARGE_TYPE)0xDFFF)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF16_IS_POINT_1UNIT(POINT) (((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x00FFFF)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF16_IS_POINT_2UNIT(POINT) (((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) >= (FIT_LARGE_TYPE)0x010000) && (((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) <= (FIT_LARGE_TYPE)0x10FFFF)) ? (FIT_TRUE) : (FIT_FALSE)) +#define UTF16_1UNIT_TO_POINT(UNIT) ((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0xFFFF) +#define UTF16_2UNIT_TO_POINT(LEAD,TAIL) (((((FIT_LARGE_TYPE)(LEAD) & (FIT_LARGE_TYPE)0xFFFF) - (FIT_LARGE_TYPE)0xD800) << 10) + ((((FIT_LARGE_TYPE)(TAIL) & (FIT_LARGE_TYPE)0xFFFF) - (FIT_LARGE_TYPE)0xDC00) << 0) + (FIT_LARGE_TYPE)0x10000) +#define UTF16_POINT_TO_1UNIT(POINT) ((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0xFFFF) +#define UTF16_POINT_TO_2UNIT_LEAD(POINT) ((((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) - (FIT_LARGE_TYPE)0x10000) >> 10) & (FIT_LARGE_TYPE)0x3FF) + (FIT_LARGE_TYPE)0xD800) +#define UTF16_POINT_TO_2UNIT_TAIL(POINT) ((((((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x1FFFFF) - (FIT_LARGE_TYPE)0x10000) >> 0) & (FIT_LARGE_TYPE)0x3FF) + (FIT_LARGE_TYPE)0xDC00) + +// UTF 32 encoding +// Using unicode version 8.0 D90, http://www.unicode.org/versions/Unicode8.0.0/ch03.pdf +// UTF 32 code units in the range 0000D800..0000DFFF are ill formed. +// Any UTF 32 code unit > 0010FFFF is ill formed. +// This check is already performed by UNICODE_IS_POINT_VALID macro +#define UTF32_IS_UNIT_VALID(UNIT) (UNICODE_IS_POINT_VALID(UNIT)) +#define UTF32_UNIT_TO_POINT(UNIT) ((FIT_LARGE_TYPE)(UNIT) & (FIT_LARGE_TYPE)0x0010FFFF) +#define UTF32_POINT_TO_UNIT(POINT) ((FIT_LARGE_TYPE)(POINT) & (FIT_LARGE_TYPE)0x0010FFFF) + +namespace fit +{ + +/////////////////////////////////////////////////////////////////////// +// Private Classes +/////////////////////////////////////////////////////////////////////// + +class StringConversionException : public RuntimeException +{ +public: + StringConversionException(const FIT_STRING_CONVERSION_ERROR newErrorCode = FIT_STRING_CONVERSION_ERROR_INVALID) + : RuntimeException(std::string("")), + errorCode(newErrorCode) + { + } + +private: + FIT_STRING_CONVERSION_ERROR errorCode; +}; + +/////////////////////////////////////////////////////////////////////// +// Private Functions +/////////////////////////////////////////////////////////////////////// + +template +FIT_BOOL ConvertStringEncoding(STRING_TYPE_DST& strDst, const FIT_UNICODE_ENCODING dstEncoding, const STRING_TYPE_SRC& strSrc, const FIT_UNICODE_ENCODING srcEncoding) +{ + STRING_TYPE_DST convertedStr; + + for (unsigned long int i = 0; i < strSrc.size(); ++i) + { + try + { + FIT_LARGE_TYPE codePoint = 0; + + // Decode the source. + switch (srcEncoding) + { + case FIT_UNICODE_ENCODING_UTF8: + { + if (!UTF8_IS_UNIT_VALID(strSrc[i])) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_UNIT); + + unsigned long int numUnits = 0; + + if (UTF8_IS_UNIT_1UNIT(strSrc[i])) + numUnits = 1; + else if (UTF8_IS_UNIT_2UNIT_LEAD(strSrc[i])) + numUnits = 2; + else if (UTF8_IS_UNIT_3UNIT_LEAD(strSrc[i])) + numUnits = 3; + else if (UTF8_IS_UNIT_4UNIT_LEAD(strSrc[i])) + numUnits = 4; + else + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_LEAD_UNIT); + + unsigned long int numContUnits = numUnits - 1; + + while (numContUnits--) + { + if ((++i) >= strSrc.size()) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_END_OF_STRING); + + if (!UTF8_IS_UNIT_MULTI_CONT(strSrc[i])) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_NON_CONTINUATION_UNIT); + + if (!UTF8_IS_UNIT_VALID(strSrc[i])) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_CONTINUATION_UNIT); + } + + switch (numUnits) + { + case 1: + codePoint = UTF8_1UNIT_TO_POINT(strSrc[i]); + if (!UTF8_IS_POINT_1UNIT(codePoint)) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_1); + break; + case 2: + codePoint = UTF8_2UNIT_TO_POINT(strSrc[i-1], strSrc[i]); + if (!UTF8_IS_POINT_2UNIT(codePoint)) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_2); + break; + case 3: + codePoint = UTF8_3UNIT_TO_POINT(strSrc[i-2], strSrc[i-1], strSrc[i]); + if (!UTF8_IS_POINT_3UNIT(codePoint)) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_3); + break; + case 4: + codePoint = UTF8_4UNIT_TO_POINT(strSrc[i-3], strSrc[i-2], strSrc[i-1], strSrc[i]); + if (!UTF8_IS_POINT_4UNIT(codePoint)) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_OVERENCODED_POINT_4); + break; + } + } + break; + + case FIT_UNICODE_ENCODING_UTF16: + { + if (!UTF16_IS_UNIT_VALID(strSrc[i])) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_UNIT); + + if (UTF16_IS_UNIT_1UNIT(strSrc[i])) + { + codePoint = static_cast(UTF16_1UNIT_TO_POINT(strSrc[i])); + + if (!UTF16_IS_POINT_1UNIT(codePoint)) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_OVERENCODED_POINT_1); + } + else if (UTF16_IS_UNIT_2UNIT_LEAD(strSrc[i])) + { + if ((++i) >= strSrc.size()) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_END_OF_STRING); + + if (!UTF16_IS_UNIT_2UNIT_TAIL(strSrc[i])) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_NON_TAIL_UNIT); + + if (!UTF16_IS_UNIT_VALID(strSrc[i])) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_TAIL_UNIT); + + codePoint = static_cast(UTF16_2UNIT_TO_POINT(strSrc[i-1], strSrc[i])); + + if (!UTF16_IS_POINT_2UNIT(codePoint)) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_OVERENCODED_POINT_2); + } + else + { + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_LEAD_UNIT); + } + } + break; + + case FIT_UNICODE_ENCODING_UTF32: + { + if (!UTF32_IS_UNIT_VALID(strSrc[i])) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF32_INVALID_UNIT); + + codePoint = static_cast(UTF32_UNIT_TO_POINT(strSrc[i])); + } + break; + + default: + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UNICODE_UNDEFINED_SOURCE_ENCODING); + } + + // Check that the code point is valid. + if (!UNICODE_IS_POINT_VALID(codePoint)) + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UNICODE_INVALID_POINT); + + // Encode the destination. + switch (dstEncoding) + { + case FIT_UNICODE_ENCODING_UTF8: + if (UTF8_IS_POINT_1UNIT(codePoint)) + { + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_1UNIT(codePoint)); + } + else if (UTF8_IS_POINT_2UNIT(codePoint)) + { + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_2UNIT_LEAD(codePoint)); + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_2UNIT_CONT1(codePoint)); + } + else if (UTF8_IS_POINT_3UNIT(codePoint)) + { + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_3UNIT_LEAD(codePoint)); + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_3UNIT_CONT1(codePoint)); + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_3UNIT_CONT2(codePoint)); + } + else if (UTF8_IS_POINT_4UNIT(codePoint)) + { + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_4UNIT_LEAD(codePoint)); + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_4UNIT_CONT1(codePoint)); + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_4UNIT_CONT2(codePoint)); + convertedStr.push_back((CHAR_TYPE_DST) UTF8_POINT_TO_4UNIT_CONT3(codePoint)); + } + else + { + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF8_INVALID_NUM_UNITS); + } + break; + + case FIT_UNICODE_ENCODING_UTF16: + if (UTF16_IS_POINT_1UNIT(codePoint)) + { + convertedStr.push_back((CHAR_TYPE_DST) UTF16_POINT_TO_1UNIT(codePoint)); + } + else if (UTF16_IS_POINT_2UNIT(codePoint)) + { + convertedStr.push_back((CHAR_TYPE_DST) UTF16_POINT_TO_2UNIT_LEAD(codePoint)); + convertedStr.push_back((CHAR_TYPE_DST) UTF16_POINT_TO_2UNIT_TAIL(codePoint)); + } + else + { + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UTF16_INVALID_NUM_UNITS); + } + break; + + case FIT_UNICODE_ENCODING_UTF32: + convertedStr.push_back((CHAR_TYPE_DST) UTF32_POINT_TO_UNIT(codePoint)); + break; + + default: + throw StringConversionException(FIT_STRING_CONVERSION_ERROR_UNICODE_UNDEFINED_DESTINATION_ENCODING); + } + + } // end try + catch (const StringConversionException&) + { + continue; // Go to the next character. + } + } + + strDst = convertedStr; + return FIT_TRUE; +} + + +/////////////////////////////////////////////////////////////////////// +// Public Functions +/////////////////////////////////////////////////////////////////////// + +Unicode::UTF8_STRING Unicode::Encode_BaseToUTF8(const FIT_WSTRING& strSrc) +{ + Unicode::UTF8_STRING strDst; + if (ConvertStringEncoding(strDst, FIT_UNICODE_ENCODING_UTF8, strSrc, INTERNAL_UNICODE_ENCODING)) + return strDst; + else + return Unicode::UTF8_STRING(); +} + +FIT_WSTRING Unicode::Encode_UTF8ToBase(const Unicode::UTF8_STRING& strSrc) +{ + FIT_WSTRING strDst; + if (ConvertStringEncoding(strDst, INTERNAL_UNICODE_ENCODING, strSrc, FIT_UNICODE_ENCODING_UTF8)) + return strDst; + else + return FIT_WSTRING_INVALID; +} + +Unicode::UTF8_STRING Unicode::Copy_StdToUTF8(const std::string& strSrc) +{ +#if 0 + Unicode::UTF8_STRING strDst(static_cast(strSrc.size()), 0); + + for (Unicode::UTF8_STRING::size_type i = 0; i < strDst.size(); i++) + strDst[i] = static_cast(strSrc[i]); + + return strDst; +#endif + + return strSrc; // Input type is typedef'd to be the same as output - this shortcut is valid. +} + +std::string Unicode::Copy_UTF8ToStd(const Unicode::UTF8_STRING& strSrc) +{ +#if 0 + string strDst(static_cast(strSrc.size()), 0); + + for (std::string::size_type i = 0; i < strDst.size(); i++) + strDst[i] = static_cast(strSrc[i]); + + return strDst; +#endif + + return strSrc; // Input type is typedef'd to be the same as output - this shortcut is valid. +} + +} // namespace fit diff --git a/Sources/cppfit/include/FITDecoder-Bridge.h b/Sources/cppfit/include/FITDecoder-Bridge.h new file mode 100644 index 0000000..52c0cfe --- /dev/null +++ b/Sources/cppfit/include/FITDecoder-Bridge.h @@ -0,0 +1,21 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#ifndef __FIT_DECODER_BRIDGE_H__ +#define __FIT_DECODER_BRIDGE_H__ + +void OnMesgFromDecoder(void *decoder, void *mesg); +void OnMesgDefinitionFromDecoder(void *decoder, void *mesgDefinition); +void OnDeveloperFieldDefinitionFromDecoder(void *decoder, void *fieldDescriptionMesg, void *developerDataIdMesg); + + +#endif //__FIT_DECODER_BRIDGE_H__ diff --git a/Sources/cppfit/include/fit.hpp b/Sources/cppfit/include/fit.hpp new file mode 100644 index 0000000..6e1e0d3 --- /dev/null +++ b/Sources/cppfit/include/fit.hpp @@ -0,0 +1,353 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + + + +#if !defined(FIT_HPP) +#define FIT_HPP +#include + +#include "fit_config.hpp" +#if defined(FIT_CPP_INCLUDE_C) + #include "fit.h" +#endif + +#include +#include + +#if !defined(FIT_CPP_INCLUDE_C) + +#if defined(FIT_USE_STDINT_H) + #include +#endif + +#endif // !defined(FIT_CPP_INCLUDE_C) + +#ifdef __GNUC__ + #define DEPRECATED(mesg) __attribute__((deprecated(mesg))) +#elif defined(_MSC_VER) + #define DEPRECATED(mesg) __declspec(deprecated(mesg)) +#else +#define DEPRECATED(mesg) +#endif + +#if !defined(FIT_CPP_INCLUDE_C) + +namespace fit +{ +#if defined(FIT_USE_STDINT_H) + typedef ::int8_t int8_t; + typedef ::int16_t int16_t; + typedef ::int32_t int32_t; + typedef ::int64_t int64_t; + typedef ::uint8_t uint8_t; + typedef ::uint16_t uint16_t; + typedef ::uint32_t uint32_t; + typedef ::uint64_t uint64_t; +#else + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned long uint32_t; + typedef unsigned long long uint64_t; + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed long int32_t; + typedef signed long long int64_t; +#endif +} + +/////////////////////////////////////////////////////////////////////// +// Version +/////////////////////////////////////////////////////////////////////// +#endif // !defined(FIT_CPP_INCLUDE_C) + +// Non-backwards compatible changes. Decode compatible with this version and earlier. +#define FIT_PROTOCOL_VERSION_MAJOR ::fit::versionMap.at( ::fit::ProtocolVersion::V20 ).GetMajorVersion() +// Backwards compatible changes. +#define FIT_PROTOCOL_VERSION_MINOR ::fit::versionMap.at( ::fit::ProtocolVersion::V20 ).GetMinorVersion() +#define FIT_PROTOCOL_VERSION_MAJOR_SHIFT 4 +#define FIT_PROTOCOL_VERSION_MAJOR_MASK ((FIT_UINT8) (0x0F << FIT_PROTOCOL_VERSION_MAJOR_SHIFT)) +#define FIT_PROTOCOL_VERSION_MINOR_MASK ((FIT_UINT8) 0x0F) +#define FIT_PROTOCOL_VERSION ::fit::versionMap.at( ::fit::ProtocolVersion::V20 ).GetVersionByte() + +#define FIT_PROFILE_VERSION_MAJOR 21 +#define FIT_PROFILE_VERSION_MINOR 94 +#define FIT_PROFILE_VERSION_SCALE 100 +#define FIT_PROFILE_VERSION ((FIT_UINT16) (FIT_PROFILE_VERSION_MAJOR * 100 + FIT_PROFILE_VERSION_MINOR)) + +#define FIT_HEADER_SIZE_NO_CRC 12 +#define FIT_HEADER_SIZE_WITH_CRC 14 + +/////////////////////////////////////////////////////////////////////// +// Type Definitions +/////////////////////////////////////////////////////////////////////// +#if !defined(FIT_CPP_INCLUDE_C) + +#define FIT_ANTFS_FILE_DATA_TYPE 128 + +#define FIT_BASE_TYPE_ENDIAN_FLAG ((FIT_UINT8)0x80) +#define FIT_BASE_TYPE_RESERVED ((FIT_UINT8)0x60) +#define FIT_BASE_TYPE_NUM_MASK ((FIT_UINT8)0x1F) + +typedef ::fit::uint8_t FIT_ENUM; +typedef const FIT_ENUM * FIT_CONST_ENUM_PTR; +#define FIT_ENUM_INVALID ((FIT_ENUM)0xFF) +#define FIT_BASE_TYPE_ENUM ((FIT_UINT8)0x00) + +typedef ::fit::int8_t FIT_SINT8; +typedef const FIT_SINT8 * FIT_CONST_SINT8_PTR; +#define FIT_SINT8_INVALID ((FIT_SINT8)0x7F) +#define FIT_BASE_TYPE_SINT8 ((FIT_UINT8)0x01) + +typedef ::fit::uint8_t FIT_UINT8; +typedef const FIT_UINT8 * FIT_CONST_UINT8_PTR; +#define FIT_UINT8_INVALID ((FIT_UINT8)0xFF) +#define FIT_BASE_TYPE_UINT8 ((FIT_UINT8)0x02) + +typedef ::fit::int16_t FIT_SINT16; +typedef const FIT_SINT16 * FIT_CONST_SINT16_PTR; +#define FIT_SINT16_INVALID ((FIT_SINT16)0x7FFF) +#define FIT_BASE_TYPE_SINT16 ((FIT_UINT8)0x83) + +typedef ::fit::uint16_t FIT_UINT16; +typedef const FIT_UINT16 * FIT_CONST_UINT16_PTR; +#define FIT_UINT16_INVALID ((FIT_UINT16)0xFFFF) +#define FIT_BASE_TYPE_UINT16 ((FIT_UINT8)0x84) + +typedef ::fit::int32_t FIT_SINT32; +typedef const FIT_SINT32 * FIT_CONST_SINT32_PTR; +#define FIT_SINT32_INVALID ((FIT_SINT32)0x7FFFFFFF) +#define FIT_BASE_TYPE_SINT32 ((FIT_UINT8)0x85) + +typedef ::fit::uint32_t FIT_UINT32; +typedef const FIT_UINT32 * FIT_CONST_UINT32_PTR; +#define FIT_UINT32_INVALID ((FIT_UINT32)0xFFFFFFFF) +#define FIT_BASE_TYPE_UINT32 ((FIT_UINT8)0x86) + +typedef char FIT_STRING; // UTF-8 null terminated string +typedef const FIT_STRING * FIT_CONST_STRING_PTR; +#define FIT_STRING_INVALID ((FIT_STRING)0x00) +#define FIT_BASE_TYPE_STRING ((FIT_UINT8)0x07) + +#endif // !defined(FIT_CPP_INCLUDE_C) + +typedef float FIT_FLOAT32; +typedef const FIT_FLOAT32 * FIT_CONST_FLOAT32_PTR; +#define FIT_FLOAT32_INVALID ((FIT_FLOAT32)*((FIT_FLOAT32*)::fit::baseTypeInvalids[FIT_BASE_TYPE_FLOAT32 & FIT_BASE_TYPE_NUM_MASK])) +#define FIT_BASE_TYPE_FLOAT32 ((FIT_UINT8)0x88) + +typedef double FIT_FLOAT64; +typedef const FIT_FLOAT64 * FIT_CONST_FLOAT64_PTR; +#define FIT_FLOAT64_INVALID ((FIT_FLOAT64)*((FIT_FLOAT64*)::fit::baseTypeInvalids[FIT_BASE_TYPE_FLOAT64 & FIT_BASE_TYPE_NUM_MASK])) +#define FIT_BASE_TYPE_FLOAT64 ((FIT_UINT8)0x89) + +#if !defined(FIT_CPP_INCLUDE_C) + +typedef ::fit::uint8_t FIT_UINT8Z; +typedef const FIT_UINT8Z * FIT_CONST_UINT8Z_PTR; +#define FIT_UINT8Z_INVALID ((FIT_UINT8Z)0x00) +#define FIT_BASE_TYPE_UINT8Z ((FIT_UINT8)0x0A) + +typedef ::fit::uint16_t FIT_UINT16Z; +typedef const FIT_UINT16Z * FIT_CONST_UINT16Z_PTR; +#define FIT_UINT16Z_INVALID ((FIT_UINT16Z)0x0000) +#define FIT_BASE_TYPE_UINT16Z ((FIT_UINT8)0x8B) + +typedef ::fit::uint32_t FIT_UINT32Z; +typedef const FIT_UINT32Z * FIT_CONST_UINT32Z_PTR; +#define FIT_UINT32Z_INVALID ((FIT_UINT32Z)0x00000000) +#define FIT_BASE_TYPE_UINT32Z ((FIT_UINT8)0x8C) + +typedef ::fit::uint8_t FIT_BYTE; +typedef const FIT_BYTE * FIT_CONST_BYTE_PTR; +#define FIT_BYTE_INVALID ((FIT_BYTE)0xFF) // Field is invalid if all bytes are invalid. +#define FIT_BASE_TYPE_BYTE ((FIT_UINT8)0x0D) + +typedef ::fit::int64_t FIT_SINT64; +typedef const FIT_SINT64 * FIT_CONST_SINT64_PTR; +#define FIT_SINT64_INVALID ((FIT_SINT64)0x7FFFFFFFFFFFFFFFL) +#define FIT_BASE_TYPE_SINT64 ((FIT_UINT8)0x8E) + +typedef ::fit::uint64_t FIT_UINT64; +typedef const FIT_UINT64 * FIT_CONST_UINT64_PTR; +#define FIT_UINT64_INVALID ((FIT_UINT64)0xFFFFFFFFFFFFFFFFL) +#define FIT_BASE_TYPE_UINT64 ((FIT_UINT8)0x8F) + +typedef ::fit::uint64_t FIT_UINT64Z; +typedef const FIT_UINT64Z * FIT_CONST_UINT64Z_PTR; +#define FIT_UINT64Z_INVALID ((FIT_UINT64Z)0x0000000000000000L) +#define FIT_BASE_TYPE_UINT64Z ((FIT_UINT8)0x90) + +#define FIT_BASE_TYPES 17 + +typedef FIT_ENUM FIT_BOOL; +#define FIT_BOOL_INVALID FIT_ENUM_INVALID +#define FIT_BOOL_FALSE ((FIT_BOOL)0) +#define FIT_BOOL_TRUE ((FIT_BOOL)1) +#define FIT_FALSE FIT_BOOL_FALSE +#define FIT_TRUE FIT_BOOL_TRUE +#define FIT_NULL nullptr + +typedef FIT_UINT32 (*FIT_READ_BYTES_FUNC)(void *, FIT_UINT32, FIT_UINT32); +#define FIT_MESG_DEF_HEADER_SIZE FIT_STRUCT_OFFSET(fields, FIT_MESG_DEF) + + +/////////////////////////////////////////////////////////////////////// +// File Header +/////////////////////////////////////////////////////////////////////// + +typedef struct +{ + FIT_UINT8 header_size; // FIT_FILE_HDR_SIZE (size of this structure) + FIT_UINT8 protocol_version; // FIT_PROTOCOL_VERSION + FIT_UINT16 profile_version; // FIT_PROFILE_VERSION + FIT_UINT32 data_size; // Does not include file header or crc. Little endian format. + FIT_UINT8 data_type[4]; // ".FIT" + FIT_UINT16 crc; // CRC of this file header in little endian format. +} FIT_FILE_HDR; + +#define FIT_FILE_HDR_SIZE 14 + + +/////////////////////////////////////////////////////////////////////// +// Record Definitions +/////////////////////////////////////////////////////////////////////// + +#define FIT_HDR_SIZE 1 +#define FIT_HDR_TIME_REC_BIT ((FIT_UINT8) 0x80) +#define FIT_HDR_TIME_TYPE_MASK ((FIT_UINT8) 0x60) +#define FIT_HDR_TIME_TYPE_SHIFT 5 +#define FIT_HDR_TIME_OFFSET_MASK ((FIT_UINT8) 0x1F) +#define FIT_HDR_TYPE_DEF_BIT ((FIT_UINT8) 0x40) +#define FIT_HDR_TYPE_MASK ((FIT_UINT8) 0x0F) +#define FIT_MAX_LOCAL_MESGS (FIT_HDR_TYPE_MASK + 1) + +#endif // !defined(FIT_CPP_INCLUDE_C) + +#define FIT_HDR_DEV_FIELD_BIT ((FIT_UINT8) 0x20) + +#if !defined(FIT_CPP_INCLUDE_C) + +/////////////////////////////////////////////////////////////////////// +// Message Definitions +/////////////////////////////////////////////////////////////////////// + +typedef struct +{ + FIT_UINT8 field_def_num; + FIT_UINT8 size; + FIT_UINT8 base_type; +} FIT_FIELD_DEF; + +#define FIT_FIELD_DEF_SIZE 3 + +typedef struct +{ + FIT_UINT8 reserved_1; + FIT_UINT8 arch; + FIT_UINT16 global_mesg_num; + FIT_UINT8 num_fields; + FIT_UINT8 fields[1]; +} FIT_MESG_DEF; + +#define FIT_MAX_MESG_SIZE ((FIT_UINT16)65535) + +#define FIT_ARCH_ENDIAN_MASK ((FIT_UINT8)0x01) +#define FIT_ARCH_ENDIAN_LITTLE ((FIT_UINT8)0) +#define FIT_ARCH_ENDIAN_BIG ((FIT_UINT8)1) + + +/////////////////////////////////////////////////////////////////////// +// Field Definitions +/////////////////////////////////////////////////////////////////////// + +#define FIT_MAX_FIELD_SIZE ((FIT_UINT8)255) +#define FIT_FIELD_NUM_INVALID ((FIT_UINT8)0xFF) +#define FIT_FIELD_NUM_MESSAGE_INDEX ((FIT_UINT8)254) +#define FIT_FIELD_NUM_TIMESTAMP ((FIT_UINT8)253) + +#define FIT_MESSAGE_INDEX_FIELD_NUM FIT_FIELD_NUM_MESSAGE_INDEX // For reverse compatibility only. Use FIT_FIELD_NUM_MESSAGE_INDEX instead. +#define FIT_TIMESTAMP_FIELD_NUM FIT_FIELD_NUM_TIMESTAMP // For reverse compatibility only. Use FIT_FIELD_NUM_TIMESTAMP instead. + + +/////////////////////////////////////////////////////////////////////// +// Macros +/////////////////////////////////////////////////////////////////////// + +#define FIT_STRUCT_OFFSET(MEMBER, STRUCT_TYPE) ( ((FIT_UINT8 *) &(((STRUCT_TYPE *) FIT_NULL)->MEMBER)) - ((FIT_UINT8 *) (FIT_NULL)) ) // Computes the byte offset of a member in a file. Compiles to a constant. + +// Offset of message in file, not including file header. +#define FIT_MESG_OFFSET(MESG_MEMBER, MESG_INDEX, MESG_SIZE, FILE) (FIT_STRUCT_OFFSET(MESG_MEMBER, FILE) + MESG_INDEX * (FIT_HDR_SIZE + MESG_SIZE) + FIT_HDR_SIZE) // Computes the byte offset of a message in a file structure. Compiles to a constant. +#define FIT_MESG_DEF_OFFSET(MESG_DEF_MEMBER, FILE) (FIT_STRUCT_OFFSET(MESG_DEF_MEMBER, FILE) + FIT_HDR_SIZE) // Computes the byte offset of a message definition in a file structure. Compiles to a constant. +#define FIT_MESG_DEF_FIELD_OFFSET(FIELD_MEMBER, FIELD_INDEX) (FIT_STRUCT_OFFSET(FIELD_MEMBER, FIT_FIELD_DEF) + FIT_FIELD_DEF_SIZE * FIELD_INDEX) // Computes the byte offset of a field definition member. Compiles to a constant. + +// Offset of message in file including file header. +#define FIT_FILE_MESG_OFFSET(MESG_MEMBER, MESG_INDEX, MESG_SIZE, FILE) (FIT_FILE_HDR_SIZE + FIT_MESG_OFFSET(MESG_MEMBER, MESG_INDEX, MESG_SIZE, FILE)) +#define FIT_FILE_MESG_DEF_OFFSET(MESG_DEF_MEMBER, FILE) (FIT_MESG_DEF_OFFSET(MESG_DEF_MEMBER, FILE)) +#define FIT_FILE_MESG_DEF_FIELD_OFFSET(FIELD_MEMBER, FIELD_INDEX) (FIT_MESG_DEF_FIELD_OFFSET(FIELD_MEMBER, FIELD_INDEX)) + +#endif // !defined(FIT_CPP_INCLUDE_C) + +/////////////////////////////////////////////////////////////////////// +// C++ Specific Definitions +/////////////////////////////////////////////////////////////////////// + +typedef std::wstring FIT_WSTRING; // Returned by message/field "Get" APIs and required by "Set" APIs. Encoding defined in fit_config.hpp. +typedef const FIT_WSTRING * FIT_CONST_WSTRING_PTR; +#define FIT_WSTRING_INVALID (FIT_WSTRING()) + + +namespace fit +{ + +enum class ProtocolVersion +{ + V10, + V20 +}; + +class DetailedProtocolVersion +{ +public: + DetailedProtocolVersion( FIT_UINT8 major, FIT_UINT8 minor ); + + FIT_UINT8 GetMajorVersion() const; + FIT_UINT8 GetMinorVersion() const; + FIT_UINT8 GetVersionByte() const; + +private: + FIT_UINT8 version; +}; + +/////////////////////////////////////////////////////////////////////// +// Public Constants +/////////////////////////////////////////////////////////////////////// + +const extern FIT_UINT8 baseTypeSizes[FIT_BASE_TYPES]; +const extern FIT_UINT8 *baseTypeInvalids[FIT_BASE_TYPES]; +const extern std::map versionMap; + + +/////////////////////////////////////////////////////////////////////// +// Public Functions +/////////////////////////////////////////////////////////////////////// + +FIT_UINT8 GetArch(void); +/////////////////////////////////////////////////////////////////////// +// Returns architecture type. +// Includes runtime check for little or big endian. +// See FIT_MESG_DEF->arch and FIT_ARCH_*. +/////////////////////////////////////////////////////////////////////// + +} // namespace fit + +#endif // !defined(FIT_HPP) diff --git a/Sources/cppfit/include/fit_accumulated_field.hpp b/Sources/cppfit/include/fit_accumulated_field.hpp new file mode 100644 index 0000000..683ac24 --- /dev/null +++ b/Sources/cppfit/include/fit_accumulated_field.hpp @@ -0,0 +1,41 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_ACCUMULATED_FIELD_HPP) +#define FIT_ACCUMULATED_FIELD_HPP + +#include "fit.hpp" + +namespace fit +{ + +class AccumulatedField +{ + public: + FIT_UINT16 mesgNum; + FIT_UINT8 destFieldNum; //Field# to accumulate into + FIT_UINT32 lastValue; + FIT_UINT32 accumulatedValue; + + AccumulatedField(); + AccumulatedField(const FIT_UINT16 newMesgNum, const FIT_UINT8 destFieldNum); + FIT_UINT32 Accumulate(const FIT_UINT32 value, const FIT_UINT8 bits); + FIT_UINT32 Set(FIT_UINT32 value); + + private: +}; + +} // namespace fit + +#endif // defined(FIT_ACCUMULATED_FIELD_HPP) + + diff --git a/Sources/cppfit/include/fit_accumulator.hpp b/Sources/cppfit/include/fit_accumulator.hpp new file mode 100644 index 0000000..20356b2 --- /dev/null +++ b/Sources/cppfit/include/fit_accumulator.hpp @@ -0,0 +1,35 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_ACCUMULATOR_HPP) +#define FIT_ACCUMULATOR_HPP + +#include +#include "fit_accumulated_field.hpp" + +namespace fit +{ + +class Accumulator +{ + public: + FIT_UINT32 Accumulate(const FIT_UINT16 mesgNum, const FIT_UINT8 destFieldNum, const FIT_UINT32 value, const FIT_UINT8 bits); + void Set(const FIT_UINT16 mesgNum, const FIT_UINT8 destFieldNum, const FIT_UINT32 value ); + + private: + std::vector fields; +}; + +} // namespace fit + +#endif // defined(FIT_ACCUMULATOR_HPP) + diff --git a/Sources/cppfit/include/fit_buffer_encode.hpp b/Sources/cppfit/include/fit_buffer_encode.hpp new file mode 100644 index 0000000..3b5bc6e --- /dev/null +++ b/Sources/cppfit/include/fit_buffer_encode.hpp @@ -0,0 +1,48 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_BUFFER_ENCODE_HPP) +#define FIT_BUFFER_ENCODE_HPP + +#include +#include +#include +#include "fit.hpp" +#include "fit_mesg.hpp" +#include "fit_mesg_definition.hpp" +#include "fit_mesg_definition_listener.hpp" +#include "fit_mesg_listener.hpp" + +namespace fit +{ + +class BufferEncode : public MesgListener, public MesgDefinitionListener +{ + public: + BufferEncode(void); + void Open(); + void Write(const MesgDefinition& mesgDef); + void Write(const Mesg& mesg); + void Write(const std::vector& mesgs); + std::string Close(void); + void OnMesg(Mesg& mesg); + void OnMesgDefinition(MesgDefinition& mesgDef); + + private: + std::stringstream stringWriter; + FIT_UINT32 dataSize; + MesgDefinition lastMesgDefinition[FIT_MAX_LOCAL_MESGS]; +}; + +} // namespace fit + +#endif // defined(FIT_BUFFER_ENCODE_HPP) diff --git a/Sources/cppfit/include/fit_config.hpp b/Sources/cppfit/include/fit_config.hpp new file mode 100644 index 0000000..5a3da2b --- /dev/null +++ b/Sources/cppfit/include/fit_config.hpp @@ -0,0 +1,27 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_CONFIG_HPP) +#define FIT_CONFIG_HPP + + +#if defined(__cplusplus) + extern "C" { +#endif + +#define FIT_USE_STDINT_H // Define to use stdint.h types. By default size in bytes of integer types assumed to be char=1, short=2, long=4. + +#define FIT_WIDE_CHAR_SIZE 4 // Define the size of a wide character (1, 2 or 4 bytes). + // Character encoding also defined by size. 1: UTF-8 2: UTF-16 4: UTF-32 +//#define FIT_CPP_INCLUDE_C // Define to include C definitions in C++ header file. Allows C and C++ code to be compiled together. + +#if defined(__cplusplus) + } +#endif + +#endif // !defined(FIT_CONFIG_HPP) diff --git a/Sources/cppfit/include/fit_crc.hpp b/Sources/cppfit/include/fit_crc.hpp new file mode 100644 index 0000000..560435a --- /dev/null +++ b/Sources/cppfit/include/fit_crc.hpp @@ -0,0 +1,31 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_CRC_HPP) +#define FIT_CRC_HPP + +#include "fit.hpp" + +namespace fit +{ + +class CRC +{ + public: + static FIT_UINT16 Get16(FIT_UINT16 crc, FIT_UINT8 byte); + static FIT_UINT16 Calc16(const volatile void *data, FIT_UINT32 size); +}; + + +} // namespace fit + +#endif // !defined(FIT_CRC_HPP) diff --git a/Sources/cppfit/include/fit_date_time.hpp b/Sources/cppfit/include/fit_date_time.hpp new file mode 100644 index 0000000..bb5db4e --- /dev/null +++ b/Sources/cppfit/include/fit_date_time.hpp @@ -0,0 +1,47 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_DATE_TIME_HPP) +#define FIT_DATE_TIME_HPP + +#include +#include +#include "fit_profile.hpp" +namespace fit +{ + +class DateTime +{ + public: + DateTime(time_t timeStamp); + DateTime(FIT_DATE_TIME timeStamp); + DateTime(FIT_DATE_TIME timeStamp, FIT_FLOAT64 fractionalTimeStamp); + DateTime(const DateTime& dateTime); + bool Equals(DateTime dateTime); + FIT_DATE_TIME GetTimeStamp(); + FIT_FLOAT64 GetFractionalTimestamp(); + void add(DateTime dateTime); + void add(FIT_DATE_TIME timestamp); + void add(double fractional_timestamp); + time_t GetTimeT(); + void ConvertSystemTimeToUTC(long offset); + int CompareTo(DateTime t1); + + private: + FIT_DATE_TIME timeStamp; + FIT_FLOAT64 fractionalTimeStamp; + static const time_t systemTimeOffset = 631065600; // Needed for conversion from UNIX time to FIT time +}; + +} // namespace fit + +#endif // !defined(FIT_DATE_TIME_HPP) diff --git a/Sources/cppfit/include/fit_decode.hpp b/Sources/cppfit/include/fit_decode.hpp new file mode 100644 index 0000000..70e6344 --- /dev/null +++ b/Sources/cppfit/include/fit_decode.hpp @@ -0,0 +1,230 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_DECODE_HPP) +#define FIT_DECODE_HPP + +#include +#include +#include +#include "fit.hpp" +#include "fit_accumulator.hpp" +#include "fit_field.hpp" +#include "fit_mesg.hpp" +#include "fit_mesg_definition.hpp" +#include "fit_mesg_definition_listener.hpp" +#include "fit_developer_field_description_listener.hpp" +#include "fit_mesg_listener.hpp" +#include "fit_runtime_exception.hpp" +#include "fit_developer_data_id_mesg.hpp" + +namespace fit +{ +class Decode +{ +public: + Decode(); + + FIT_BOOL IsFIT(std::istream &file); + /////////////////////////////////////////////////////////////////////// + // Reads the file header to check if the file is FIT. + // Does not check CRC. + // Parameters: + // file Pointer to file to read. + // Returns true if file is FIT. + /////////////////////////////////////////////////////////////////////// + + FIT_BOOL CheckIntegrity(std::istream &file); + /////////////////////////////////////////////////////////////////////// + // Reads the FIT binary file header and crc to check compatibility and integrity. + // Parameters: + // file Pointer to file to read. + // Returns true if file is ok (not corrupt). + /////////////////////////////////////////////////////////////////////// + + void SkipHeader(); + /////////////////////////////////////////////////////////////////////// + // Overrides the default read behaviour by skipping header decode. + // CRC checking is not possible since the datasize is unknown. + // Decode continues until EOF is encountered or a decode error occurs. + // May only be called prior to calling Read. + /////////////////////////////////////////////////////////////////////// + + void IncompleteStream(); + /////////////////////////////////////////////////////////////////////// + // Override the default read behaviour allowing decode of partial streams. + // If EOF is encountered no exception is raised. Caller may choose to call + // resume possibly after more bytes have arrived in the stream. May only be set + // prior to first calling Read. + /////////////////////////////////////////////////////////////////////// + + void SuppressComponentExpansion(void); + /////////////////////////////////////////////////////////////////////// + // Override the default read behaviour by suppressing the component expansion + // If your application does not care about component expansion this can speed + // up processing significantly. + /////////////////////////////////////////////////////////////////////// + + FIT_BOOL Read(std::istream &file, MesgListener& mesgListener); + /////////////////////////////////////////////////////////////////////// + // Reads a FIT binary file. + // Parameters: + // file Pointer to file to read. + // mesgListener Message listener + // Returns true if finished read file, otherwise false if decoding is paused. + /////////////////////////////////////////////////////////////////////// + + FIT_BOOL Read(std::istream &file, MesgListener& mesgListener, MesgDefinitionListener& mesgDefinitionListener); + /////////////////////////////////////////////////////////////////////// + // Reads a FIT binary file. + // Parameters: + // file Pointer to file to read. + // mesgListener Message listener + // mesgDefinitionListener Message definition listener + // Returns true if finished read file, otherwise false if decoding is paused. + /////////////////////////////////////////////////////////////////////// + + FIT_BOOL Read + ( + std::istream* file, + MesgListener* mesgListener, + MesgDefinitionListener* definitionListener, + DeveloperFieldDescriptionListener* descriptionListener + ); + /////////////////////////////////////////////////////////////////////// + // Reads a FIT binary file. + // Parameters: + // file Pointer to file to read. + // mesgListener Message listener + // definitionListener Message definition listener + // descriptionListener Developer field description listener + // Returns true if finished read file, otherwise false if decoding is paused. + /////////////////////////////////////////////////////////////////////// + + FIT_BOOL Read + ( + std::istream* file, + void* objcppCaller + ); + + void Pause(void); + /////////////////////////////////////////////////////////////////////// + // Pauses the decoding of a FIT binary file. Call Resume() to resume decoding. + /////////////////////////////////////////////////////////////////////// + + FIT_BOOL Resume(void); + /////////////////////////////////////////////////////////////////////// + // Resumes the decoding of a FIT binary file (see Pause()). + // Returns true if finished reading file. + /////////////////////////////////////////////////////////////////////// + + FIT_BOOL getInvalidDataSize(void); + /////////////////////////////////////////////////////////////////////// + // Returns the invalid data size flag. + // This flag is set when the file size in the header is 0. + /////////////////////////////////////////////////////////////////////// + + void setInvalidDataSize(FIT_BOOL value); + /////////////////////////////////////////////////////////////////////// + // Set the invalid data size flag. + // Parameters: + // value The value to set the flag to. + /////////////////////////////////////////////////////////////////////// + +private: + typedef enum + { + STATE_FILE_HDR, + STATE_RECORD, + STATE_RESERVED1, + STATE_ARCH, + STATE_MESG_NUM_0, + STATE_MESG_NUM_1, + STATE_NUM_FIELDS, + STATE_FIELD_NUM, + STATE_FIELD_SIZE, + STATE_FIELD_TYPE, + STATE_NUM_DEV_FIELDS, + STATE_DEV_FIELD_NUM, + STATE_DEV_FIELD_SIZE, + STATE_DEV_FIELD_INDEX, + STATE_FIELD_DATA, + STATE_DEV_FIELD_DATA, + STATE_FILE_CRC_HIGH, + STATES + } STATE; + + typedef enum + { + RETURN_CONTINUE, + RETURN_MESG, + RETURN_MESG_DEF, + RETURN_END_OF_FILE, + RETURN_ERROR, + RETURNS + } RETURN; + + static const FIT_UINT8 DevFieldNumOffset; + static const FIT_UINT8 DevFieldSizeOffset; + static const FIT_UINT8 DevFieldIndexOffset; + static const FIT_UINT16 BufferSize = 512; + + STATE state; + FIT_BOOL hasDevData; + FIT_UINT8 fileHdrOffset; + FIT_UINT8 fileHdrSize; + FIT_UINT32 fileDataSize; + FIT_UINT32 fileBytesLeft; + FIT_UINT16 crc; + Mesg mesg; + FIT_UINT8 localMesgIndex; + MesgDefinition localMesgDefs[FIT_MAX_LOCAL_MESGS]; + FIT_UINT8 archs[FIT_MAX_LOCAL_MESGS]; + FIT_UINT8 numFields; + FIT_UINT8 fieldIndex; + FIT_UINT8 fieldDataIndex; + FIT_UINT8 fieldBytesLeft; + FIT_UINT8 fieldData[FIT_MAX_FIELD_SIZE]; + FIT_UINT8 lastTimeOffset; + FIT_UINT32 timestamp; + Accumulator accumulator; + std::istream* file; + MesgListener* mesgListener; + MesgDefinitionListener* mesgDefinitionListener; + DeveloperFieldDescriptionListener* descriptionListener; + FIT_BOOL pause; + std::string headerException; + FIT_BOOL skipHeader; + FIT_BOOL streamIsComplete; + FIT_BOOL invalidDataSize; + FIT_BOOL suppressComponentExpansion; + FIT_UINT32 currentByteOffset; + std::unordered_map developers; + std::unordered_map> descriptions; + FIT_UINT32 currentByteIndex; + FIT_UINT32 bytesRead; + char buffer[BufferSize]; + void *objcppCaller; + + void InitRead(std::istream &file); + void InitRead(std::istream &file, FIT_BOOL startOfFile); + void UpdateEndianness(FIT_UINT8 type, FIT_UINT8 size); + RETURN ReadByte(FIT_UINT8 data); + void ExpandComponents(Field* containingField, const Profile::FIELD_COMPONENT* components, FIT_UINT16 numComponents); + FIT_BOOL Read(std::istream* file); +}; + +} // namespace fit + +#endif // defined(DECODE_HPP) + + diff --git a/Sources/cppfit/include/fit_developer_data_id_mesg.hpp b/Sources/cppfit/include/fit_developer_data_id_mesg.hpp new file mode 100644 index 0000000..36348fa --- /dev/null +++ b/Sources/cppfit/include/fit_developer_data_id_mesg.hpp @@ -0,0 +1,218 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_DEVELOPER_DATA_ID_MESG_HPP) +#define FIT_DEVELOPER_DATA_ID_MESG_HPP + +#include "fit_mesg.hpp" + +namespace fit +{ + +class DeveloperDataIdMesg : public Mesg +{ +public: + class FieldDefNum final + { + public: + static const FIT_UINT8 DeveloperId = 0; + static const FIT_UINT8 ApplicationId = 1; + static const FIT_UINT8 ManufacturerId = 2; + static const FIT_UINT8 DeveloperDataIndex = 3; + static const FIT_UINT8 ApplicationVersion = 4; + static const FIT_UINT8 Invalid = FIT_FIELD_NUM_INVALID; + }; + + DeveloperDataIdMesg(void) : Mesg(Profile::MESG_DEVELOPER_DATA_ID) + { + } + + DeveloperDataIdMesg(const Mesg &mesg) : Mesg(mesg) + { + } + + /////////////////////////////////////////////////////////////////////// + // Returns number of developer_id + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetNumDeveloperId(void) const + { + return GetFieldNumValues(0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of developer_id field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsDeveloperIdValid(FIT_UINT8 index) const + { + const Field* field = GetField(0); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(index); + } + + /////////////////////////////////////////////////////////////////////// + // Returns developer_id field + /////////////////////////////////////////////////////////////////////// + FIT_BYTE GetDeveloperId(FIT_UINT8 index) const + { + return GetFieldBYTEValue(0, index, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set developer_id field + /////////////////////////////////////////////////////////////////////// + void SetDeveloperId(FIT_UINT8 index, FIT_BYTE developerId) + { + SetFieldBYTEValue(0, developerId, index, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Returns number of application_id + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetNumApplicationId(void) const + { + return GetFieldNumValues(1, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of application_id field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsApplicationIdValid(FIT_UINT8 index) const + { + const Field* field = GetField(1); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(index); + } + + /////////////////////////////////////////////////////////////////////// + // Returns application_id field + /////////////////////////////////////////////////////////////////////// + FIT_BYTE GetApplicationId(FIT_UINT8 index) const + { + return GetFieldBYTEValue(1, index, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set application_id field + /////////////////////////////////////////////////////////////////////// + void SetApplicationId(FIT_UINT8 index, FIT_BYTE applicationId) + { + SetFieldBYTEValue(1, applicationId, index, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of manufacturer_id field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsManufacturerIdValid() const + { + const Field* field = GetField(2); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns manufacturer_id field + /////////////////////////////////////////////////////////////////////// + FIT_MANUFACTURER GetManufacturerId(void) const + { + return GetFieldUINT16Value(2, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set manufacturer_id field + /////////////////////////////////////////////////////////////////////// + void SetManufacturerId(FIT_MANUFACTURER manufacturerId) + { + SetFieldUINT16Value(2, manufacturerId, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of developer_data_index field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsDeveloperDataIndexValid() const + { + const Field* field = GetField(3); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns developer_data_index field + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetDeveloperDataIndex(void) const + { + return GetFieldUINT8Value(3, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set developer_data_index field + /////////////////////////////////////////////////////////////////////// + void SetDeveloperDataIndex(FIT_UINT8 developerDataIndex) + { + SetFieldUINT8Value(3, developerDataIndex, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of application_version field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsApplicationVersionValid() const + { + const Field* field = GetField(4); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns application_version field + /////////////////////////////////////////////////////////////////////// + FIT_UINT32 GetApplicationVersion(void) const + { + return GetFieldUINT32Value(4, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set application_version field + /////////////////////////////////////////////////////////////////////// + void SetApplicationVersion(FIT_UINT32 applicationVersion) + { + SetFieldUINT32Value(4, applicationVersion, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + +}; + +} // namespace fit + +#endif // !defined(FIT_DEVELOPER_DATA_ID_MESG_HPP) diff --git a/Sources/cppfit/include/fit_developer_field.hpp b/Sources/cppfit/include/fit_developer_field.hpp new file mode 100644 index 0000000..90c5c04 --- /dev/null +++ b/Sources/cppfit/include/fit_developer_field.hpp @@ -0,0 +1,67 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(DEVELOPER_FIELD_HPP) +#define DEVELOPER_FIELD_HPP + +#include "fit_field_base.hpp" + +namespace fit +{ +class DeveloperDataIdMesg; +class FieldDescriptionMesg; +class DeveloperFieldDefinition; + +class DeveloperField + : public FieldBase +{ +public: + DeveloperField(void); + DeveloperField(const DeveloperField &field); + DeveloperField(const FieldDescriptionMesg& definition, const DeveloperDataIdMesg& developer); + explicit DeveloperField(const DeveloperFieldDefinition& definition); + virtual ~DeveloperField(); + + virtual FIT_BOOL GetIsAccumulated() const override; + virtual FIT_BOOL IsValid(void) const override; + virtual FIT_UINT8 GetNum(void) const override; + virtual std::string GetName() const override; + virtual FIT_UINT8 GetType() const override; + virtual std::string GetUnits() const override; + virtual FIT_FLOAT64 GetScale() const override; + virtual FIT_FLOAT64 GetOffset() const override; + virtual const Profile::SUBFIELD* GetSubField(const FIT_UINT16 subFieldIndex) const override; + virtual FIT_UINT16 GetNumSubFields(void) const override; + virtual const Profile::FIELD_COMPONENT* GetComponent(const FIT_UINT16 component) const override; + virtual FIT_UINT16 GetNumComponents(void) const override; + + std::vector GetAppId() const; + FIT_UINT32 GetAppVersion() const; + FIT_UINT8 GetNativeOverride() const; + + const DeveloperFieldDefinition& GetDefinition() const; + + // Unhide the overloaded get methods from FieldBase. + using FieldBase::GetName; + using FieldBase::GetType; + using FieldBase::GetUnits; + using FieldBase::GetScale; + using FieldBase::GetOffset; + +private: + DeveloperFieldDefinition* mDefinition; + +}; + +} // namespace fit + +#endif // defined(DEVELOPER_FIELD_HPP) diff --git a/Sources/cppfit/include/fit_developer_field_definition.hpp b/Sources/cppfit/include/fit_developer_field_definition.hpp new file mode 100644 index 0000000..cd072d9 --- /dev/null +++ b/Sources/cppfit/include/fit_developer_field_definition.hpp @@ -0,0 +1,59 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_DEVELOPER_FIELD_DEFINITION_HPP) +#define FIT_DEVELOPER_FIELD_DEFINITION_HPP + +#include +#include "fit.hpp" +#include "fit_field_description_mesg.hpp" +#include "fit_developer_data_id_mesg.hpp" + +namespace fit +{ +class DeveloperField; + +class DeveloperFieldDefinition +{ +public: + DeveloperFieldDefinition(); + DeveloperFieldDefinition(const DeveloperFieldDefinition& other); + DeveloperFieldDefinition(FIT_UINT8 fieldNum, FIT_UINT8 size, FIT_UINT8 developerDataIndex); + DeveloperFieldDefinition(const FieldDescriptionMesg& desc, const DeveloperDataIdMesg& developer, FIT_UINT8 size); + explicit DeveloperFieldDefinition(const DeveloperField& field); + virtual ~DeveloperFieldDefinition(); + + FIT_BOOL IsDefined() const; + FIT_UINT8 GetNum() const; + FIT_UINT8 GetSize() const; + FIT_UINT8 GetType() const; + FIT_UINT8 GetDeveloperDataIndex() const; + const FieldDescriptionMesg& GetDescription() const; + const DeveloperDataIdMesg& GetDeveloper() const; + + FIT_BOOL operator==(const DeveloperFieldDefinition& field) const; + FIT_BOOL operator!=(const DeveloperFieldDefinition& field) const; + DeveloperFieldDefinition& operator=(const DeveloperFieldDefinition& other); + FIT_UINT8 Write(std::ostream &file) const; + +private: + FIT_UINT8 num; + FIT_UINT8 size; + FIT_UINT8 developerDataIndex; + + FieldDescriptionMesg* mesg; + DeveloperDataIdMesg* developer; +}; + +} // namespace fit + +#endif // defined(FIT_FIELD_DEFINITION_HPP) diff --git a/Sources/cppfit/include/fit_developer_field_description.hpp b/Sources/cppfit/include/fit_developer_field_description.hpp new file mode 100644 index 0000000..8078448 --- /dev/null +++ b/Sources/cppfit/include/fit_developer_field_description.hpp @@ -0,0 +1,41 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_DEVELOPER_FIELD_DESCRIPTION_HPP) +#define FIT_DEVELOPER_FIELD_DESCRIPTION_HPP + +#include "fit_field_description_mesg.hpp" +#include "fit_developer_data_id_mesg.hpp" +#include + +namespace fit +{ +class DeveloperFieldDescription +{ +public: + DeveloperFieldDescription() = delete; + DeveloperFieldDescription(const DeveloperFieldDescription& other); + DeveloperFieldDescription(const FieldDescriptionMesg& desc, const DeveloperDataIdMesg& developer); + virtual ~DeveloperFieldDescription(); + + FIT_UINT32 GetApplicationVersion() const; + FIT_UINT8 GetFieldDefinitionNumber() const; + std::vector GetApplicationId() const; + +private: + FieldDescriptionMesg* description; + DeveloperDataIdMesg* developer; +}; + +} // namespace fit + +#endif // defined(FIT_FIELD_DEFINITION_HPP) diff --git a/Sources/cppfit/include/fit_developer_field_description_listener.hpp b/Sources/cppfit/include/fit_developer_field_description_listener.hpp new file mode 100644 index 0000000..012981d --- /dev/null +++ b/Sources/cppfit/include/fit_developer_field_description_listener.hpp @@ -0,0 +1,31 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_DEVELOPER_FIELD_DESCRIPTION_LISTENER_HPP) +#define FIT_DEVELOPER_FIELD_DESCRIPTION_LISTENER_HPP + +#include "fit_developer_field_description.hpp" + +namespace fit +{ +class DeveloperFieldDescription; + +class DeveloperFieldDescriptionListener +{ +public: + virtual ~DeveloperFieldDescriptionListener() {}; + virtual void OnDeveloperFieldDescription( const DeveloperFieldDescription& desc ) = 0; +}; + +} // namespace fit + +#endif // FIT_DEVELOPER_FIELD_DESCRIPTION_LISTENER_HPP diff --git a/Sources/cppfit/include/fit_encode.hpp b/Sources/cppfit/include/fit_encode.hpp new file mode 100644 index 0000000..f79d7fd --- /dev/null +++ b/Sources/cppfit/include/fit_encode.hpp @@ -0,0 +1,63 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_ENCODE_HPP) +#define FIT_ENCODE_HPP + +#include +#include +#include "fit.hpp" +#include "fit_mesg.hpp" +#include "fit_mesg_definition.hpp" +#include "fit_mesg_definition_listener.hpp" +#include "fit_mesg_listener.hpp" +#include "fit_protocol_validator.hpp" + +namespace fit +{ + +class Encode + : public MesgListener + , public MesgDefinitionListener +{ +public: + DEPRECATED + ( + "Encode now supports multiple protocol version encoding use: " + "Encode::Encode(fit::ProtocolVersion) to ensure features " + "are correctly validated" + ) + Encode(void); + Encode( ProtocolVersion version ); + + void Open(std::iostream& file); + void Write(const MesgDefinition& mesgDef); + void Write(const Mesg& mesg); + void Write(const std::vector& mesgs); + FIT_BOOL Close(void); + void OnMesg(Mesg& mesg); + void OnMesgDefinition(MesgDefinition& mesgDef); + +private: + void WriteFileHeader(); + + MesgDefinition lastMesgDefinition[FIT_MAX_LOCAL_MESGS]; + FIT_UINT32 dataSize; + std::iostream *file; + + ProtocolVersion version; + ProtocolValidator validator; +}; + +} // namespace fit + +#endif // defined(FIT_ENCODE_HPP) diff --git a/Sources/cppfit/include/fit_field.hpp b/Sources/cppfit/include/fit_field.hpp new file mode 100644 index 0000000..2f3b9cf --- /dev/null +++ b/Sources/cppfit/include/fit_field.hpp @@ -0,0 +1,71 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIELD_HPP) +#define FIELD_HPP + +#include +#include +#include +#include +#include "fit.hpp" +#include "fit_profile.hpp" +#include "fit_field_base.hpp" + +namespace fit +{ + +class Field + : public FieldBase +{ +public: + Field(void); + Field(const Field &field); + Field(const Profile::MESG_INDEX mesgIndex, const FIT_UINT16 fieldIndex); + Field(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum); + Field(const std::string& mesgName, const std::string& fieldName); + + FIT_UINT16 GetIndex(void) const; + FIT_BOOL GetIsExpanded(void) const; + void SetIsExpanded(FIT_BOOL newValue); + + virtual void SetBaseType( FIT_UINT8 type ); + virtual FIT_BOOL IsValid(void) const override; + virtual FIT_BOOL GetIsAccumulated() const override; + virtual std::string GetName(void) const override; + virtual FIT_UINT8 GetNum(void) const override; + virtual FIT_UINT8 GetType(void) const override; + virtual std::string GetUnits(void) const override; + virtual FIT_FLOAT64 GetScale(void) const override; + virtual FIT_FLOAT64 GetOffset(void) const override; + virtual FIT_UINT16 GetNumComponents(void) const override; + virtual FIT_UINT16 GetNumSubFields(void) const override; + virtual const Profile::FIELD_COMPONENT* GetComponent(const FIT_UINT16 component) const override; + virtual const Profile::SUBFIELD* GetSubField(const FIT_UINT16 subFieldIndex) const override; + + // Unhide the overloaded get methods from FieldBase. + using FieldBase::GetName; + using FieldBase::GetType; + using FieldBase::GetUnits; + using FieldBase::GetScale; + using FieldBase::GetOffset; + +private: + const Profile::MESG* profile; + FIT_UINT16 profileIndex; + FIT_UINT8 type; + FIT_BOOL isFieldExpanded; +}; + +} // namespace fit + +#endif // defined(FIELD_HPP) diff --git a/Sources/cppfit/include/fit_field_base.hpp b/Sources/cppfit/include/fit_field_base.hpp new file mode 100644 index 0000000..8f6e138 --- /dev/null +++ b/Sources/cppfit/include/fit_field_base.hpp @@ -0,0 +1,126 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIELD_BASE_HPP) +#define FIELD_BASE_HPP + +#include +#include +#include +#include +#include "fit.hpp" +#include "fit_profile.hpp" + +namespace fit +{ + +class FieldBase +{ +public: + FieldBase(void); + FieldBase(const FieldBase& other); + virtual ~FieldBase(); + + std::string GetName(const FIT_UINT16 subFieldIndex) const; + FIT_UINT8 GetType(const FIT_UINT16 subFieldIndex) const; + std::string GetUnits(const FIT_UINT16 subFieldIndex) const; + FIT_FLOAT64 GetScale(const FIT_UINT16 subFieldIndex) const; + FIT_FLOAT64 GetOffset(const FIT_UINT16 subFieldIndex) const; + + virtual FIT_BOOL GetIsAccumulated() const = 0; + virtual FIT_BOOL IsValid(void) const = 0; + virtual FIT_UINT8 GetNum(void) const = 0; + virtual std::string GetName() const = 0; + virtual FIT_UINT8 GetType() const = 0; + virtual std::string GetUnits() const = 0; + virtual FIT_FLOAT64 GetScale() const = 0; + virtual FIT_FLOAT64 GetOffset() const = 0; + virtual const Profile::SUBFIELD* GetSubField(const FIT_UINT16 subFieldIndex) const = 0; + virtual FIT_UINT16 GetNumSubFields(void) const = 0; + virtual const Profile::FIELD_COMPONENT* GetComponent(const FIT_UINT16 component) const = 0; + virtual FIT_UINT16 GetNumComponents(void) const = 0; + + FIT_BOOL IsSignedInteger(const FIT_UINT16 subFieldIndex = 0) const; + FIT_UINT8 GetSize(void) const; + FIT_UINT8 GetNumValues(void) const; + + FIT_UINT32 GetBitsValue(const FIT_UINT16 offset, const FIT_UINT8 bits) const; + FIT_SINT32 GetBitsSignedValue(const FIT_UINT16 offset, const FIT_UINT8 bits) const; + FIT_BYTE GetValuesBYTE(const FIT_UINT8 index) const; + FIT_SINT8 GetValuesSINT8(const FIT_UINT8 index) const; + FIT_UINT8 GetValuesUINT8(const FIT_UINT8 index) const; + FIT_FLOAT32 GetFLOAT32Value(const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_MAIN_FIELD) const; + FIT_FLOAT64 GetFLOAT64Value(const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_MAIN_FIELD) const; + FIT_WSTRING GetSTRINGValue(const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_MAIN_FIELD) const; + FIT_FLOAT64 GetRawValue() const; + FIT_FLOAT64 GetRawValue(const FIT_UINT8 fieldArrayIndex) const; + FIT_ENUM GetENUMValue(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_BYTE GetBYTEValue(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_SINT8 GetSINT8Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT8 GetUINT8Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT8Z GetUINT8ZValue(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_SINT16 GetSINT16Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT16 GetUINT16Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT16Z GetUINT16ZValue(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_SINT32 GetSINT32Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT32 GetUINT32Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT32Z GetUINT32ZValue(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_SINT64 GetSINT64Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT64 GetUINT64Value(const FIT_UINT8 fieldArrayIndex = 0) const; + FIT_UINT64Z GetUINT64ZValue(const FIT_UINT8 fieldArrayIndex = 0) const; + + void AddRawValue(const FIT_FLOAT64 rawValue, const FIT_UINT8 fieldArrayIndex = 0); + void SetENUMValue(const FIT_ENUM value, const FIT_UINT8 fieldArrayIndex = 0); + void SetBYTEValue(const FIT_BYTE value, const FIT_UINT8 fieldArrayIndex = 0); + void SetSINT8Value(const FIT_SINT8 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT8Value(const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT8ZValue(const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetSINT16Value(const FIT_SINT16 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT16Value(const FIT_UINT16 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT16ZValue(const FIT_UINT16Z value, const FIT_UINT8 fieldArrayIndex = 0); + void SetSINT32Value(const FIT_SINT32 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT32Value(const FIT_UINT32 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT32ZValue(const FIT_UINT32Z value, const FIT_UINT8 fieldArrayIndex = 0); + void SetSINT64Value(const FIT_SINT64 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT64Value(const FIT_UINT64 value, const FIT_UINT8 fieldArrayIndex = 0); + void SetUINT64ZValue(const FIT_UINT64Z value, const FIT_UINT8 fieldArrayIndex = 0); + void SetFLOAT32Value(const FIT_FLOAT32 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_MAIN_FIELD); + void SetFLOAT64Value(const FIT_FLOAT64 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_MAIN_FIELD); + void SetSTRINGValue(const FIT_WSTRING& value, const FIT_UINT8 fieldArrayIndex = 0); + void AddValue(const FIT_FLOAT64 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_MAIN_FIELD); + + FIT_BOOL Read(const void *data, const FIT_UINT8 size); + FIT_UINT8 Write(std::ostream &file) const; + FIT_BOOL IsValueValid(const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subfieldIndex = FIT_SUBFIELD_INDEX_MAIN_FIELD) const; + +protected: + FIT_UINT16 GetSubField(const std::string& subFieldName) const; + +private: + template + T GetValue(const FIT_UINT8 fieldArrayIndex) const; + + template + TTo ConvertBaseType(const FIT_UINT8 fieldArrayIndex, const FIT_UINT8 toBaseType) const; + + FIT_BOOL GetMemoryValue(const FIT_UINT8 fieldArrayIndex, FIT_UINT8 * buffer, const FIT_UINT8 bufferSize) const; + + FIT_FLOAT64 GetRawValueInternal(const FIT_UINT8 fieldArrayIndex = 0) const; + static FIT_FLOAT64 Round(FIT_FLOAT64 value); + + std::vector values; + std::vector stringIndexes; +}; + +} // namespace fit + +#endif // defined(FIELD_BASE_HPP) diff --git a/Sources/cppfit/include/fit_field_definition.hpp b/Sources/cppfit/include/fit_field_definition.hpp new file mode 100644 index 0000000..5b37871 --- /dev/null +++ b/Sources/cppfit/include/fit_field_definition.hpp @@ -0,0 +1,47 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_FIELD_DEFINITION_HPP) +#define FIT_FIELD_DEFINITION_HPP + +#include +#include "fit.hpp" +#include "fit_field.hpp" + +namespace fit +{ + +class FieldDefinition +{ +public: + FieldDefinition(); + FieldDefinition(const Field& field); + FieldDefinition(const Field* field); + FIT_UINT8 GetNum() const; + FIT_UINT8 GetSize() const; + FIT_UINT8 GetType() const; + void SetNum(const FIT_UINT8 newNum); + void SetSize(const FIT_UINT8 newSize); + void SetType(const FIT_UINT8 newType); + FIT_BOOL operator==(const FieldDefinition& field) const; + FIT_BOOL operator!=(const FieldDefinition& field) const; + FIT_UINT8 Write(std::ostream &file) const; + +private: + FIT_UINT8 num; + FIT_UINT8 size; + FIT_UINT8 type; +}; + +} // namespace fit + +#endif // defined(FIT_FIELD_DEFINITION_HPP) diff --git a/Sources/cppfit/include/fit_field_description_mesg.hpp b/Sources/cppfit/include/fit_field_description_mesg.hpp new file mode 100644 index 0000000..aead26c --- /dev/null +++ b/Sources/cppfit/include/fit_field_description_mesg.hpp @@ -0,0 +1,506 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_FIELD_DESCRIPTION_MESG_HPP) +#define FIT_FIELD_DESCRIPTION_MESG_HPP + +#include "fit_mesg.hpp" + +namespace fit +{ + +class FieldDescriptionMesg : public Mesg +{ +public: + class FieldDefNum final + { + public: + static const FIT_UINT8 DeveloperDataIndex = 0; + static const FIT_UINT8 FieldDefinitionNumber = 1; + static const FIT_UINT8 FitBaseTypeId = 2; + static const FIT_UINT8 FieldName = 3; + static const FIT_UINT8 Array = 4; + static const FIT_UINT8 Components = 5; + static const FIT_UINT8 Scale = 6; + static const FIT_UINT8 Offset = 7; + static const FIT_UINT8 Units = 8; + static const FIT_UINT8 Bits = 9; + static const FIT_UINT8 Accumulate = 10; + static const FIT_UINT8 FitBaseUnitId = 13; + static const FIT_UINT8 NativeMesgNum = 14; + static const FIT_UINT8 NativeFieldNum = 15; + static const FIT_UINT8 Invalid = FIT_FIELD_NUM_INVALID; + }; + + FieldDescriptionMesg(void) : Mesg(Profile::MESG_FIELD_DESCRIPTION) + { + } + + FieldDescriptionMesg(const Mesg &mesg) : Mesg(mesg) + { + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of developer_data_index field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsDeveloperDataIndexValid() const + { + const Field* field = GetField(0); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns developer_data_index field + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetDeveloperDataIndex(void) const + { + return GetFieldUINT8Value(0, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set developer_data_index field + /////////////////////////////////////////////////////////////////////// + void SetDeveloperDataIndex(FIT_UINT8 developerDataIndex) + { + SetFieldUINT8Value(0, developerDataIndex, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of field_definition_number field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsFieldDefinitionNumberValid() const + { + const Field* field = GetField(1); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns field_definition_number field + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetFieldDefinitionNumber(void) const + { + return GetFieldUINT8Value(1, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set field_definition_number field + /////////////////////////////////////////////////////////////////////// + void SetFieldDefinitionNumber(FIT_UINT8 fieldDefinitionNumber) + { + SetFieldUINT8Value(1, fieldDefinitionNumber, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of fit_base_type_id field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsFitBaseTypeIdValid() const + { + const Field* field = GetField(2); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns fit_base_type_id field + /////////////////////////////////////////////////////////////////////// + FIT_FIT_BASE_TYPE GetFitBaseTypeId(void) const + { + return GetFieldUINT8Value(2, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set fit_base_type_id field + /////////////////////////////////////////////////////////////////////// + void SetFitBaseTypeId(FIT_FIT_BASE_TYPE fitBaseTypeId) + { + SetFieldUINT8Value(2, fitBaseTypeId, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Returns number of field_name + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetNumFieldName(void) const + { + return GetFieldNumValues(3, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of field_name field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsFieldNameValid(FIT_UINT8 index) const + { + const Field* field = GetField(3); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(index); + } + + /////////////////////////////////////////////////////////////////////// + // Returns field_name field + /////////////////////////////////////////////////////////////////////// + FIT_WSTRING GetFieldName(FIT_UINT8 index) const + { + return GetFieldSTRINGValue(3, index, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set field_name field + /////////////////////////////////////////////////////////////////////// + void SetFieldName(FIT_UINT8 index, FIT_WSTRING fieldName) + { + SetFieldSTRINGValue(3, fieldName, index); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of array field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsArrayValid() const + { + const Field* field = GetField(4); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns array field + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetArray(void) const + { + return GetFieldUINT8Value(4, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set array field + /////////////////////////////////////////////////////////////////////// + void SetArray(FIT_UINT8 array) + { + SetFieldUINT8Value(4, array, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of components field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsComponentsValid() const + { + const Field* field = GetField(5); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns components field + /////////////////////////////////////////////////////////////////////// + FIT_WSTRING GetComponents(void) const + { + return GetFieldSTRINGValue(5, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set components field + /////////////////////////////////////////////////////////////////////// + void SetComponents(FIT_WSTRING components) + { + SetFieldSTRINGValue(5, components, 0); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of scale field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsScaleValid() const + { + const Field* field = GetField(6); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns scale field + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetScale(void) const + { + return GetFieldUINT8Value(6, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set scale field + /////////////////////////////////////////////////////////////////////// + void SetScale(FIT_UINT8 scale) + { + SetFieldUINT8Value(6, scale, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of offset field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsOffsetValid() const + { + const Field* field = GetField(7); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns offset field + /////////////////////////////////////////////////////////////////////// + FIT_SINT8 GetOffset(void) const + { + return GetFieldSINT8Value(7, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set offset field + /////////////////////////////////////////////////////////////////////// + void SetOffset(FIT_SINT8 offset) + { + SetFieldSINT8Value(7, offset, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Returns number of units + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetNumUnits(void) const + { + return GetFieldNumValues(8, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of units field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsUnitsValid(FIT_UINT8 index) const + { + const Field* field = GetField(8); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(index); + } + + /////////////////////////////////////////////////////////////////////// + // Returns units field + /////////////////////////////////////////////////////////////////////// + FIT_WSTRING GetUnits(FIT_UINT8 index) const + { + return GetFieldSTRINGValue(8, index, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set units field + /////////////////////////////////////////////////////////////////////// + void SetUnits(FIT_UINT8 index, FIT_WSTRING units) + { + SetFieldSTRINGValue(8, units, index); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of bits field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsBitsValid() const + { + const Field* field = GetField(9); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns bits field + /////////////////////////////////////////////////////////////////////// + FIT_WSTRING GetBits(void) const + { + return GetFieldSTRINGValue(9, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set bits field + /////////////////////////////////////////////////////////////////////// + void SetBits(FIT_WSTRING bits) + { + SetFieldSTRINGValue(9, bits, 0); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of accumulate field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsAccumulateValid() const + { + const Field* field = GetField(10); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns accumulate field + /////////////////////////////////////////////////////////////////////// + FIT_WSTRING GetAccumulate(void) const + { + return GetFieldSTRINGValue(10, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set accumulate field + /////////////////////////////////////////////////////////////////////// + void SetAccumulate(FIT_WSTRING accumulate) + { + SetFieldSTRINGValue(10, accumulate, 0); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of fit_base_unit_id field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsFitBaseUnitIdValid() const + { + const Field* field = GetField(13); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns fit_base_unit_id field + /////////////////////////////////////////////////////////////////////// + FIT_FIT_BASE_UNIT GetFitBaseUnitId(void) const + { + return GetFieldUINT16Value(13, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set fit_base_unit_id field + /////////////////////////////////////////////////////////////////////// + void SetFitBaseUnitId(FIT_FIT_BASE_UNIT fitBaseUnitId) + { + SetFieldUINT16Value(13, fitBaseUnitId, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of native_mesg_num field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsNativeMesgNumValid() const + { + const Field* field = GetField(14); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns native_mesg_num field + /////////////////////////////////////////////////////////////////////// + FIT_MESG_NUM GetNativeMesgNum(void) const + { + return GetFieldUINT16Value(14, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set native_mesg_num field + /////////////////////////////////////////////////////////////////////// + void SetNativeMesgNum(FIT_MESG_NUM nativeMesgNum) + { + SetFieldUINT16Value(14, nativeMesgNum, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Checks the validity of native_field_num field + // Returns FIT_TRUE if field is valid + /////////////////////////////////////////////////////////////////////// + FIT_BOOL IsNativeFieldNumValid() const + { + const Field* field = GetField(15); + if( FIT_NULL == field ) + { + return FIT_FALSE; + } + + return field->IsValueValid(); + } + + /////////////////////////////////////////////////////////////////////// + // Returns native_field_num field + /////////////////////////////////////////////////////////////////////// + FIT_UINT8 GetNativeFieldNum(void) const + { + return GetFieldUINT8Value(15, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + + /////////////////////////////////////////////////////////////////////// + // Set native_field_num field + /////////////////////////////////////////////////////////////////////// + void SetNativeFieldNum(FIT_UINT8 nativeFieldNum) + { + SetFieldUINT8Value(15, nativeFieldNum, 0, FIT_SUBFIELD_INDEX_MAIN_FIELD); + } + +}; + +} // namespace fit + +#endif // !defined(FIT_FIELD_DESCRIPTION_MESG_HPP) diff --git a/Sources/cppfit/include/fit_mesg.hpp b/Sources/cppfit/include/fit_mesg.hpp new file mode 100644 index 0000000..67bc27b --- /dev/null +++ b/Sources/cppfit/include/fit_mesg.hpp @@ -0,0 +1,114 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + + +#if !defined(FIT_MESG_HPP) +#define FIT_MESG_HPP + +#include +#include +#include +#include "fit.hpp" +#include "fit_field.hpp" +#include "fit_developer_field.hpp" +#include "fit_field_definition.hpp" + +namespace fit +{ +class MesgDefinition; // Forward declaration. + +class Mesg +{ +public: + Mesg(void); + Mesg(const Mesg &mesg); + Mesg(const Profile::MESG_INDEX index); + Mesg(const std::string& name); + Mesg(const FIT_UINT16 num); + FIT_BOOL IsValid(void) const; + FIT_BOOL GetIsFieldAccumulated(const FIT_UINT8 num) const; + const DeveloperField* GetDeveloperField(FIT_UINT8 developerDataIndex, FIT_UINT8 num) const; + int Write(std::ostream& file, const MesgDefinition* mesgDef = FIT_NULL) const; + std::string GetName() const; + FIT_UINT16 GetNum() const; + FIT_UINT8 GetLocalNum() const; + void SetLocalNum(const FIT_UINT8 newLocalNum); + FIT_BOOL HasField(const int fieldNum) const; + void AddField(const Field& field); + Field* AddField(const FIT_UINT8 fieldNum); + void AddDeveloperField(const DeveloperField& field); + void SetField(const Field& field); + void SetFields(const Mesg& mesg); + int GetNumFields() const; + int GetNumDevFields() const; + Field* GetFieldByIndex(const FIT_UINT16 index); + Field* GetField(const FIT_UINT8 fieldNum); + Field* GetField(const std::string& name); + const Field* GetFieldByIndex(const FIT_UINT16 index) const; + const Field* GetField(const FIT_UINT8 fieldNum) const; + const Field* GetField(const std::string& name) const; + const std::vector& GetDeveloperFields() const; + FIT_BOOL CanSupportSubField(const FIT_UINT8 fieldNum, const FIT_UINT16 subFieldIndex) const; + FIT_BOOL CanSupportSubField(const Field* field, const FIT_UINT16 subFieldIndex) const; + FIT_UINT16 GetActiveSubFieldIndexByFieldIndex(const FIT_UINT16 fieldIndex) const; + FIT_UINT16 GetActiveSubFieldIndex(const FIT_UINT8 fieldNum) const; + FIT_UINT8 GetFieldNumValues(const FIT_UINT8 fieldNum, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_ENUM GetFieldENUMValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_BYTE GetFieldBYTEValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_SINT8 GetFieldSINT8Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT8 GetFieldUINT8Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT8Z GetFieldUINT8ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_SINT16 GetFieldSINT16Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT16 GetFieldUINT16Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT16Z GetFieldUINT16ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_SINT32 GetFieldSINT32Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT32 GetFieldUINT32Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT32Z GetFieldUINT32ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_SINT64 GetFieldSINT64Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT64 GetFieldUINT64Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_UINT64Z GetFieldUINT64ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_FLOAT32 GetFieldFLOAT32Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_FLOAT64 GetFieldFLOAT64Value(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + FIT_WSTRING GetFieldSTRINGValue(const FIT_UINT8 fieldNum, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD) const; + void SetFieldENUMValue(const FIT_UINT8 fieldNum, const FIT_ENUM value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldBYTEValue(const FIT_UINT8 fieldNum, const FIT_BYTE value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldSINT8Value(const FIT_UINT8 fieldNum, const FIT_SINT8 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT8Value(const FIT_UINT8 fieldNum, const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT8ZValue(const FIT_UINT8 fieldNum, const FIT_UINT8 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldSINT16Value(const FIT_UINT8 fieldNum, const FIT_SINT16 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT16Value(const FIT_UINT8 fieldNum, const FIT_UINT16 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT16ZValue(const FIT_UINT8 fieldNum, const FIT_UINT16Z value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldSINT32Value(const FIT_UINT8 fieldNum, const FIT_SINT32 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT32Value(const FIT_UINT8 fieldNum, const FIT_UINT32 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT32ZValue(const FIT_UINT8 fieldNum, const FIT_UINT32Z value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldSINT64Value(const FIT_UINT8 fieldNum, const FIT_SINT64 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT64Value(const FIT_UINT8 fieldNum, const FIT_UINT64 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldUINT64ZValue(const FIT_UINT8 fieldNum, const FIT_UINT64Z value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldFLOAT32Value(const FIT_UINT8 fieldNum, const FIT_FLOAT32 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldFLOAT64Value(const FIT_UINT8 fieldNum, const FIT_FLOAT64 value, const FIT_UINT8 fieldArrayIndex = 0, const FIT_UINT16 subFieldIndex = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD); + void SetFieldSTRINGValue(const FIT_UINT8 fieldNum, const FIT_WSTRING& value, const FIT_UINT8 fieldArrayIndex = 0); + + std::vector GetOverrideFields(const FIT_UINT8 fieldNum) const; + void RemoveExpandedFields(void); + +private: + + static int WriteField(std::ostream& file, const FieldBase* field, FIT_UINT8 defSize, FIT_UINT8 defType); + const Profile::MESG* profile; + FIT_UINT8 localNum; + std::vector fields; + std::vector devFields; +}; + +} // namespace fit + +#endif // defined(FIT_MESG_HPP) diff --git a/Sources/cppfit/include/fit_mesg_definition.hpp b/Sources/cppfit/include/fit_mesg_definition.hpp new file mode 100644 index 0000000..592aa0f --- /dev/null +++ b/Sources/cppfit/include/fit_mesg_definition.hpp @@ -0,0 +1,65 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_MESG_DEFINITION_HPP) +#define FIT_MESG_DEFINITION_HPP + +#include +#include +#include "fit.hpp" +#include "fit_field_definition.hpp" +#include "fit_developer_field_definition.hpp" +#include "fit_mesg.hpp" + +namespace fit +{ + +class MesgDefinition +{ +public: + MesgDefinition(); + MesgDefinition(const Mesg& mesg); + FIT_UINT16 GetNum() const; + FIT_UINT8 GetLocalNum() const; + void SetNum(const FIT_UINT16 newNum); + void SetLocalNum(const FIT_UINT8 newLocalNum); + void AddField(const FieldDefinition& fieldDef); + void AddDevField(const DeveloperFieldDefinition& fieldDef); + void ClearFields(); + int GetNumFields() const; + int GetNumDevFields() const; + std::vector& GetFields(); + std::vector& GetDevFields(); + FieldDefinition* GetField(const FIT_UINT8 fieldNum); + FieldDefinition* GetFieldByIndex(const FIT_UINT16 index); + DeveloperFieldDefinition* GetDevFieldByIndex(const FIT_UINT16 index); + const std::vector& GetFields() const; + const std::vector& GetDevFields() const; + const FieldDefinition* GetField(const FIT_UINT8 fieldNum) const; + const FieldDefinition* GetFieldByIndex(const FIT_UINT16 index) const; + const DeveloperFieldDefinition* GetDevFieldByIndex(const FIT_UINT16 index) const; + FIT_BOOL operator==(const MesgDefinition& mesgDef) const; + FIT_BOOL operator!=(const MesgDefinition& mesgDef) const; + FIT_BOOL Supports(const Mesg& mesg) const; + FIT_BOOL Supports(const MesgDefinition& mesgDef) const; + int Write(std::ostream &file) const; + +private: + FIT_UINT16 num; + FIT_UINT8 localNum; + std::vector fields; + std::vector devFields; +}; + +} // namespace fit + +#endif // defined(FIT_MESG_DEFINITION_HPP) diff --git a/Sources/cppfit/include/fit_mesg_definition_listener.hpp b/Sources/cppfit/include/fit_mesg_definition_listener.hpp new file mode 100644 index 0000000..6bd966b --- /dev/null +++ b/Sources/cppfit/include/fit_mesg_definition_listener.hpp @@ -0,0 +1,30 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_MESG_DEFINITION_LISTENER_HPP) +#define FIT_MESG_DEFINITION_LISTENER_HPP + +#include "fit_mesg_definition.hpp" + +namespace fit +{ + +class MesgDefinitionListener +{ +public: + virtual ~MesgDefinitionListener() {} + virtual void OnMesgDefinition(MesgDefinition& mesgDef) = 0; +}; + +} // namespace fit + +#endif // !defined(FIT_MESG_DEFINITION_LISTENER_HPP) diff --git a/Sources/cppfit/include/fit_mesg_listener.hpp b/Sources/cppfit/include/fit_mesg_listener.hpp new file mode 100644 index 0000000..aa6a5ff --- /dev/null +++ b/Sources/cppfit/include/fit_mesg_listener.hpp @@ -0,0 +1,30 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_MESG_LISTENER_HPP) +#define FIT_MESG_LISTENER_HPP + +#include "fit_mesg.hpp" + +namespace fit +{ + +class MesgListener +{ +public: + virtual ~MesgListener() {} + virtual void OnMesg(Mesg& mesg) = 0; +}; + +} // namespace fit + +#endif // !defined(FIT_MESG_LISTENER_HPP) diff --git a/Sources/cppfit/include/fit_profile.hpp b/Sources/cppfit/include/fit_profile.hpp new file mode 100644 index 0000000..8d8ef38 --- /dev/null +++ b/Sources/cppfit/include/fit_profile.hpp @@ -0,0 +1,6287 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_PROFILE_HPP) +#define FIT_PROFILE_HPP + +#include +#include "fit.hpp" +#include "fit_config.hpp" +#if defined(FIT_CPP_INCLUDE_C) +#include "fit_product.h" +#endif + + +/////////////////////////////////////////////////////////////////////// +// Public Definitions +/////////////////////////////////////////////////////////////////////// + +#if !defined(FIT_CPP_INCLUDE_C) // Types defined in fit_product.h if including C code. + +/////////////////////////////////////////////////////////////////////// +// Types +/////////////////////////////////////////////////////////////////////// + + +typedef FIT_ENUM FIT_FILE; +#define FIT_FILE_INVALID FIT_ENUM_INVALID +#define FIT_FILE_DEVICE ((FIT_FILE)1) // Read only, single file. Must be in root directory. +#define FIT_FILE_SETTINGS ((FIT_FILE)2) // Read/write, single file. Directory=Settings +#define FIT_FILE_SPORT ((FIT_FILE)3) // Read/write, multiple files, file number = sport type. Directory=Sports +#define FIT_FILE_ACTIVITY ((FIT_FILE)4) // Read/erase, multiple files. Directory=Activities +#define FIT_FILE_WORKOUT ((FIT_FILE)5) // Read/write/erase, multiple files. Directory=Workouts +#define FIT_FILE_COURSE ((FIT_FILE)6) // Read/write/erase, multiple files. Directory=Courses +#define FIT_FILE_SCHEDULES ((FIT_FILE)7) // Read/write, single file. Directory=Schedules +#define FIT_FILE_WEIGHT ((FIT_FILE)9) // Read only, single file. Circular buffer. All message definitions at start of file. Directory=Weight +#define FIT_FILE_TOTALS ((FIT_FILE)10) // Read only, single file. Directory=Totals +#define FIT_FILE_GOALS ((FIT_FILE)11) // Read/write, single file. Directory=Goals +#define FIT_FILE_BLOOD_PRESSURE ((FIT_FILE)14) // Read only. Directory=Blood Pressure +#define FIT_FILE_MONITORING_A ((FIT_FILE)15) // Read only. Directory=Monitoring. File number=sub type. +#define FIT_FILE_ACTIVITY_SUMMARY ((FIT_FILE)20) // Read/erase, multiple files. Directory=Activities +#define FIT_FILE_MONITORING_DAILY ((FIT_FILE)28) +#define FIT_FILE_MONITORING_B ((FIT_FILE)32) // Read only. Directory=Monitoring. File number=identifier +#define FIT_FILE_SEGMENT ((FIT_FILE)34) // Read/write/erase. Multiple Files. Directory=Segments +#define FIT_FILE_SEGMENT_LIST ((FIT_FILE)35) // Read/write/erase. Single File. Directory=Segments +#define FIT_FILE_EXD_CONFIGURATION ((FIT_FILE)40) // Read/write/erase. Single File. Directory=Settings +#define FIT_FILE_MFG_RANGE_MIN ((FIT_FILE)0xF7) // 0xF7 - 0xFE reserved for manufacturer specific file types +#define FIT_FILE_MFG_RANGE_MAX ((FIT_FILE)0xFE) // 0xF7 - 0xFE reserved for manufacturer specific file types +#define FIT_FILE_COUNT 20 + +typedef FIT_UINT16 FIT_MESG_NUM; +#define FIT_MESG_NUM_INVALID FIT_UINT16_INVALID +#define FIT_MESG_NUM_FILE_ID ((FIT_MESG_NUM)0) +#define FIT_MESG_NUM_CAPABILITIES ((FIT_MESG_NUM)1) +#define FIT_MESG_NUM_DEVICE_SETTINGS ((FIT_MESG_NUM)2) +#define FIT_MESG_NUM_USER_PROFILE ((FIT_MESG_NUM)3) +#define FIT_MESG_NUM_HRM_PROFILE ((FIT_MESG_NUM)4) +#define FIT_MESG_NUM_SDM_PROFILE ((FIT_MESG_NUM)5) +#define FIT_MESG_NUM_BIKE_PROFILE ((FIT_MESG_NUM)6) +#define FIT_MESG_NUM_ZONES_TARGET ((FIT_MESG_NUM)7) +#define FIT_MESG_NUM_HR_ZONE ((FIT_MESG_NUM)8) +#define FIT_MESG_NUM_POWER_ZONE ((FIT_MESG_NUM)9) +#define FIT_MESG_NUM_MET_ZONE ((FIT_MESG_NUM)10) +#define FIT_MESG_NUM_SPORT ((FIT_MESG_NUM)12) +#define FIT_MESG_NUM_GOAL ((FIT_MESG_NUM)15) +#define FIT_MESG_NUM_SESSION ((FIT_MESG_NUM)18) +#define FIT_MESG_NUM_LAP ((FIT_MESG_NUM)19) +#define FIT_MESG_NUM_RECORD ((FIT_MESG_NUM)20) +#define FIT_MESG_NUM_EVENT ((FIT_MESG_NUM)21) +#define FIT_MESG_NUM_DEVICE_INFO ((FIT_MESG_NUM)23) +#define FIT_MESG_NUM_WORKOUT ((FIT_MESG_NUM)26) +#define FIT_MESG_NUM_WORKOUT_STEP ((FIT_MESG_NUM)27) +#define FIT_MESG_NUM_SCHEDULE ((FIT_MESG_NUM)28) +#define FIT_MESG_NUM_WEIGHT_SCALE ((FIT_MESG_NUM)30) +#define FIT_MESG_NUM_COURSE ((FIT_MESG_NUM)31) +#define FIT_MESG_NUM_COURSE_POINT ((FIT_MESG_NUM)32) +#define FIT_MESG_NUM_TOTALS ((FIT_MESG_NUM)33) +#define FIT_MESG_NUM_ACTIVITY ((FIT_MESG_NUM)34) +#define FIT_MESG_NUM_SOFTWARE ((FIT_MESG_NUM)35) +#define FIT_MESG_NUM_FILE_CAPABILITIES ((FIT_MESG_NUM)37) +#define FIT_MESG_NUM_MESG_CAPABILITIES ((FIT_MESG_NUM)38) +#define FIT_MESG_NUM_FIELD_CAPABILITIES ((FIT_MESG_NUM)39) +#define FIT_MESG_NUM_FILE_CREATOR ((FIT_MESG_NUM)49) +#define FIT_MESG_NUM_BLOOD_PRESSURE ((FIT_MESG_NUM)51) +#define FIT_MESG_NUM_SPEED_ZONE ((FIT_MESG_NUM)53) +#define FIT_MESG_NUM_MONITORING ((FIT_MESG_NUM)55) +#define FIT_MESG_NUM_TRAINING_FILE ((FIT_MESG_NUM)72) +#define FIT_MESG_NUM_HRV ((FIT_MESG_NUM)78) +#define FIT_MESG_NUM_ANT_RX ((FIT_MESG_NUM)80) +#define FIT_MESG_NUM_ANT_TX ((FIT_MESG_NUM)81) +#define FIT_MESG_NUM_ANT_CHANNEL_ID ((FIT_MESG_NUM)82) +#define FIT_MESG_NUM_LENGTH ((FIT_MESG_NUM)101) +#define FIT_MESG_NUM_MONITORING_INFO ((FIT_MESG_NUM)103) +#define FIT_MESG_NUM_PAD ((FIT_MESG_NUM)105) +#define FIT_MESG_NUM_SLAVE_DEVICE ((FIT_MESG_NUM)106) +#define FIT_MESG_NUM_CONNECTIVITY ((FIT_MESG_NUM)127) +#define FIT_MESG_NUM_WEATHER_CONDITIONS ((FIT_MESG_NUM)128) +#define FIT_MESG_NUM_WEATHER_ALERT ((FIT_MESG_NUM)129) +#define FIT_MESG_NUM_CADENCE_ZONE ((FIT_MESG_NUM)131) +#define FIT_MESG_NUM_HR ((FIT_MESG_NUM)132) +#define FIT_MESG_NUM_SEGMENT_LAP ((FIT_MESG_NUM)142) +#define FIT_MESG_NUM_MEMO_GLOB ((FIT_MESG_NUM)145) +#define FIT_MESG_NUM_SEGMENT_ID ((FIT_MESG_NUM)148) +#define FIT_MESG_NUM_SEGMENT_LEADERBOARD_ENTRY ((FIT_MESG_NUM)149) +#define FIT_MESG_NUM_SEGMENT_POINT ((FIT_MESG_NUM)150) +#define FIT_MESG_NUM_SEGMENT_FILE ((FIT_MESG_NUM)151) +#define FIT_MESG_NUM_WORKOUT_SESSION ((FIT_MESG_NUM)158) +#define FIT_MESG_NUM_WATCHFACE_SETTINGS ((FIT_MESG_NUM)159) +#define FIT_MESG_NUM_GPS_METADATA ((FIT_MESG_NUM)160) +#define FIT_MESG_NUM_CAMERA_EVENT ((FIT_MESG_NUM)161) +#define FIT_MESG_NUM_TIMESTAMP_CORRELATION ((FIT_MESG_NUM)162) +#define FIT_MESG_NUM_GYROSCOPE_DATA ((FIT_MESG_NUM)164) +#define FIT_MESG_NUM_ACCELEROMETER_DATA ((FIT_MESG_NUM)165) +#define FIT_MESG_NUM_THREE_D_SENSOR_CALIBRATION ((FIT_MESG_NUM)167) +#define FIT_MESG_NUM_VIDEO_FRAME ((FIT_MESG_NUM)169) +#define FIT_MESG_NUM_OBDII_DATA ((FIT_MESG_NUM)174) +#define FIT_MESG_NUM_NMEA_SENTENCE ((FIT_MESG_NUM)177) +#define FIT_MESG_NUM_AVIATION_ATTITUDE ((FIT_MESG_NUM)178) +#define FIT_MESG_NUM_VIDEO ((FIT_MESG_NUM)184) +#define FIT_MESG_NUM_VIDEO_TITLE ((FIT_MESG_NUM)185) +#define FIT_MESG_NUM_VIDEO_DESCRIPTION ((FIT_MESG_NUM)186) +#define FIT_MESG_NUM_VIDEO_CLIP ((FIT_MESG_NUM)187) +#define FIT_MESG_NUM_OHR_SETTINGS ((FIT_MESG_NUM)188) +#define FIT_MESG_NUM_EXD_SCREEN_CONFIGURATION ((FIT_MESG_NUM)200) +#define FIT_MESG_NUM_EXD_DATA_FIELD_CONFIGURATION ((FIT_MESG_NUM)201) +#define FIT_MESG_NUM_EXD_DATA_CONCEPT_CONFIGURATION ((FIT_MESG_NUM)202) +#define FIT_MESG_NUM_FIELD_DESCRIPTION ((FIT_MESG_NUM)206) +#define FIT_MESG_NUM_DEVELOPER_DATA_ID ((FIT_MESG_NUM)207) +#define FIT_MESG_NUM_MAGNETOMETER_DATA ((FIT_MESG_NUM)208) +#define FIT_MESG_NUM_BAROMETER_DATA ((FIT_MESG_NUM)209) +#define FIT_MESG_NUM_ONE_D_SENSOR_CALIBRATION ((FIT_MESG_NUM)210) +#define FIT_MESG_NUM_SET ((FIT_MESG_NUM)225) +#define FIT_MESG_NUM_STRESS_LEVEL ((FIT_MESG_NUM)227) +#define FIT_MESG_NUM_DIVE_SETTINGS ((FIT_MESG_NUM)258) +#define FIT_MESG_NUM_DIVE_GAS ((FIT_MESG_NUM)259) +#define FIT_MESG_NUM_DIVE_ALARM ((FIT_MESG_NUM)262) +#define FIT_MESG_NUM_EXERCISE_TITLE ((FIT_MESG_NUM)264) +#define FIT_MESG_NUM_DIVE_SUMMARY ((FIT_MESG_NUM)268) +#define FIT_MESG_NUM_JUMP ((FIT_MESG_NUM)285) +#define FIT_MESG_NUM_CLIMB_PRO ((FIT_MESG_NUM)317) +#define FIT_MESG_NUM_DEVICE_AUX_BATTERY_INFO ((FIT_MESG_NUM)375) +#define FIT_MESG_NUM_MFG_RANGE_MIN ((FIT_MESG_NUM)0xFF00) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages +#define FIT_MESG_NUM_MFG_RANGE_MAX ((FIT_MESG_NUM)0xFFFE) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages +#define FIT_MESG_NUM_COUNT 91 + +typedef FIT_UINT8 FIT_CHECKSUM; +#define FIT_CHECKSUM_INVALID FIT_UINT8_INVALID +#define FIT_CHECKSUM_CLEAR ((FIT_CHECKSUM)0) // Allows clear of checksum for flash memory where can only write 1 to 0 without erasing sector. +#define FIT_CHECKSUM_OK ((FIT_CHECKSUM)1) // Set to mark checksum as valid if computes to invalid values 0 or 0xFF. Checksum can also be set to ok to save encoding computation time. +#define FIT_CHECKSUM_COUNT 2 + +typedef FIT_UINT8Z FIT_FILE_FLAGS; +#define FIT_FILE_FLAGS_INVALID FIT_UINT8Z_INVALID +#define FIT_FILE_FLAGS_READ ((FIT_FILE_FLAGS)0x02) +#define FIT_FILE_FLAGS_WRITE ((FIT_FILE_FLAGS)0x04) +#define FIT_FILE_FLAGS_ERASE ((FIT_FILE_FLAGS)0x08) +#define FIT_FILE_FLAGS_COUNT 3 + +typedef FIT_ENUM FIT_MESG_COUNT; +#define FIT_MESG_COUNT_INVALID FIT_ENUM_INVALID +#define FIT_MESG_COUNT_NUM_PER_FILE ((FIT_MESG_COUNT)0) +#define FIT_MESG_COUNT_MAX_PER_FILE ((FIT_MESG_COUNT)1) +#define FIT_MESG_COUNT_MAX_PER_FILE_TYPE ((FIT_MESG_COUNT)2) +#define FIT_MESG_COUNT_COUNT 3 + +typedef FIT_UINT32 FIT_DATE_TIME; // seconds since UTC 00:00 Dec 31 1989 +#define FIT_DATE_TIME_INVALID FIT_UINT32_INVALID +#define FIT_DATE_TIME_MIN ((FIT_DATE_TIME)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on) +#define FIT_DATE_TIME_COUNT 1 + +typedef FIT_UINT32 FIT_LOCAL_DATE_TIME; // seconds since 00:00 Dec 31 1989 in local time zone +#define FIT_LOCAL_DATE_TIME_INVALID FIT_UINT32_INVALID +#define FIT_LOCAL_DATE_TIME_MIN ((FIT_LOCAL_DATE_TIME)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on) +#define FIT_LOCAL_DATE_TIME_COUNT 1 + +typedef FIT_UINT16 FIT_MESSAGE_INDEX; +#define FIT_MESSAGE_INDEX_INVALID FIT_UINT16_INVALID +#define FIT_MESSAGE_INDEX_SELECTED ((FIT_MESSAGE_INDEX)0x8000) // message is selected if set +#define FIT_MESSAGE_INDEX_RESERVED ((FIT_MESSAGE_INDEX)0x7000) // reserved (default 0) +#define FIT_MESSAGE_INDEX_MASK ((FIT_MESSAGE_INDEX)0x0FFF) // index +#define FIT_MESSAGE_INDEX_COUNT 3 + +typedef FIT_UINT8 FIT_DEVICE_INDEX; +#define FIT_DEVICE_INDEX_INVALID FIT_UINT8_INVALID +#define FIT_DEVICE_INDEX_CREATOR ((FIT_DEVICE_INDEX)0) // Creator of the file is always device index 0. +#define FIT_DEVICE_INDEX_COUNT 1 + +typedef FIT_ENUM FIT_GENDER; +#define FIT_GENDER_INVALID FIT_ENUM_INVALID +#define FIT_GENDER_FEMALE ((FIT_GENDER)0) +#define FIT_GENDER_MALE ((FIT_GENDER)1) +#define FIT_GENDER_COUNT 2 + +typedef FIT_ENUM FIT_LANGUAGE; +#define FIT_LANGUAGE_INVALID FIT_ENUM_INVALID +#define FIT_LANGUAGE_ENGLISH ((FIT_LANGUAGE)0) +#define FIT_LANGUAGE_FRENCH ((FIT_LANGUAGE)1) +#define FIT_LANGUAGE_ITALIAN ((FIT_LANGUAGE)2) +#define FIT_LANGUAGE_GERMAN ((FIT_LANGUAGE)3) +#define FIT_LANGUAGE_SPANISH ((FIT_LANGUAGE)4) +#define FIT_LANGUAGE_CROATIAN ((FIT_LANGUAGE)5) +#define FIT_LANGUAGE_CZECH ((FIT_LANGUAGE)6) +#define FIT_LANGUAGE_DANISH ((FIT_LANGUAGE)7) +#define FIT_LANGUAGE_DUTCH ((FIT_LANGUAGE)8) +#define FIT_LANGUAGE_FINNISH ((FIT_LANGUAGE)9) +#define FIT_LANGUAGE_GREEK ((FIT_LANGUAGE)10) +#define FIT_LANGUAGE_HUNGARIAN ((FIT_LANGUAGE)11) +#define FIT_LANGUAGE_NORWEGIAN ((FIT_LANGUAGE)12) +#define FIT_LANGUAGE_POLISH ((FIT_LANGUAGE)13) +#define FIT_LANGUAGE_PORTUGUESE ((FIT_LANGUAGE)14) +#define FIT_LANGUAGE_SLOVAKIAN ((FIT_LANGUAGE)15) +#define FIT_LANGUAGE_SLOVENIAN ((FIT_LANGUAGE)16) +#define FIT_LANGUAGE_SWEDISH ((FIT_LANGUAGE)17) +#define FIT_LANGUAGE_RUSSIAN ((FIT_LANGUAGE)18) +#define FIT_LANGUAGE_TURKISH ((FIT_LANGUAGE)19) +#define FIT_LANGUAGE_LATVIAN ((FIT_LANGUAGE)20) +#define FIT_LANGUAGE_UKRAINIAN ((FIT_LANGUAGE)21) +#define FIT_LANGUAGE_ARABIC ((FIT_LANGUAGE)22) +#define FIT_LANGUAGE_FARSI ((FIT_LANGUAGE)23) +#define FIT_LANGUAGE_BULGARIAN ((FIT_LANGUAGE)24) +#define FIT_LANGUAGE_ROMANIAN ((FIT_LANGUAGE)25) +#define FIT_LANGUAGE_CHINESE ((FIT_LANGUAGE)26) +#define FIT_LANGUAGE_JAPANESE ((FIT_LANGUAGE)27) +#define FIT_LANGUAGE_KOREAN ((FIT_LANGUAGE)28) +#define FIT_LANGUAGE_TAIWANESE ((FIT_LANGUAGE)29) +#define FIT_LANGUAGE_THAI ((FIT_LANGUAGE)30) +#define FIT_LANGUAGE_HEBREW ((FIT_LANGUAGE)31) +#define FIT_LANGUAGE_BRAZILIAN_PORTUGUESE ((FIT_LANGUAGE)32) +#define FIT_LANGUAGE_INDONESIAN ((FIT_LANGUAGE)33) +#define FIT_LANGUAGE_MALAYSIAN ((FIT_LANGUAGE)34) +#define FIT_LANGUAGE_VIETNAMESE ((FIT_LANGUAGE)35) +#define FIT_LANGUAGE_BURMESE ((FIT_LANGUAGE)36) +#define FIT_LANGUAGE_MONGOLIAN ((FIT_LANGUAGE)37) +#define FIT_LANGUAGE_CUSTOM ((FIT_LANGUAGE)254) +#define FIT_LANGUAGE_COUNT 39 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_0; // Bit field corresponding to language enum type (1 << language). +#define FIT_LANGUAGE_BITS_0_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_0_ENGLISH ((FIT_LANGUAGE_BITS_0)0x01) +#define FIT_LANGUAGE_BITS_0_FRENCH ((FIT_LANGUAGE_BITS_0)0x02) +#define FIT_LANGUAGE_BITS_0_ITALIAN ((FIT_LANGUAGE_BITS_0)0x04) +#define FIT_LANGUAGE_BITS_0_GERMAN ((FIT_LANGUAGE_BITS_0)0x08) +#define FIT_LANGUAGE_BITS_0_SPANISH ((FIT_LANGUAGE_BITS_0)0x10) +#define FIT_LANGUAGE_BITS_0_CROATIAN ((FIT_LANGUAGE_BITS_0)0x20) +#define FIT_LANGUAGE_BITS_0_CZECH ((FIT_LANGUAGE_BITS_0)0x40) +#define FIT_LANGUAGE_BITS_0_DANISH ((FIT_LANGUAGE_BITS_0)0x80) +#define FIT_LANGUAGE_BITS_0_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_1; +#define FIT_LANGUAGE_BITS_1_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_1_DUTCH ((FIT_LANGUAGE_BITS_1)0x01) +#define FIT_LANGUAGE_BITS_1_FINNISH ((FIT_LANGUAGE_BITS_1)0x02) +#define FIT_LANGUAGE_BITS_1_GREEK ((FIT_LANGUAGE_BITS_1)0x04) +#define FIT_LANGUAGE_BITS_1_HUNGARIAN ((FIT_LANGUAGE_BITS_1)0x08) +#define FIT_LANGUAGE_BITS_1_NORWEGIAN ((FIT_LANGUAGE_BITS_1)0x10) +#define FIT_LANGUAGE_BITS_1_POLISH ((FIT_LANGUAGE_BITS_1)0x20) +#define FIT_LANGUAGE_BITS_1_PORTUGUESE ((FIT_LANGUAGE_BITS_1)0x40) +#define FIT_LANGUAGE_BITS_1_SLOVAKIAN ((FIT_LANGUAGE_BITS_1)0x80) +#define FIT_LANGUAGE_BITS_1_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_2; +#define FIT_LANGUAGE_BITS_2_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_2_SLOVENIAN ((FIT_LANGUAGE_BITS_2)0x01) +#define FIT_LANGUAGE_BITS_2_SWEDISH ((FIT_LANGUAGE_BITS_2)0x02) +#define FIT_LANGUAGE_BITS_2_RUSSIAN ((FIT_LANGUAGE_BITS_2)0x04) +#define FIT_LANGUAGE_BITS_2_TURKISH ((FIT_LANGUAGE_BITS_2)0x08) +#define FIT_LANGUAGE_BITS_2_LATVIAN ((FIT_LANGUAGE_BITS_2)0x10) +#define FIT_LANGUAGE_BITS_2_UKRAINIAN ((FIT_LANGUAGE_BITS_2)0x20) +#define FIT_LANGUAGE_BITS_2_ARABIC ((FIT_LANGUAGE_BITS_2)0x40) +#define FIT_LANGUAGE_BITS_2_FARSI ((FIT_LANGUAGE_BITS_2)0x80) +#define FIT_LANGUAGE_BITS_2_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_3; +#define FIT_LANGUAGE_BITS_3_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_3_BULGARIAN ((FIT_LANGUAGE_BITS_3)0x01) +#define FIT_LANGUAGE_BITS_3_ROMANIAN ((FIT_LANGUAGE_BITS_3)0x02) +#define FIT_LANGUAGE_BITS_3_CHINESE ((FIT_LANGUAGE_BITS_3)0x04) +#define FIT_LANGUAGE_BITS_3_JAPANESE ((FIT_LANGUAGE_BITS_3)0x08) +#define FIT_LANGUAGE_BITS_3_KOREAN ((FIT_LANGUAGE_BITS_3)0x10) +#define FIT_LANGUAGE_BITS_3_TAIWANESE ((FIT_LANGUAGE_BITS_3)0x20) +#define FIT_LANGUAGE_BITS_3_THAI ((FIT_LANGUAGE_BITS_3)0x40) +#define FIT_LANGUAGE_BITS_3_HEBREW ((FIT_LANGUAGE_BITS_3)0x80) +#define FIT_LANGUAGE_BITS_3_COUNT 8 + +typedef FIT_UINT8Z FIT_LANGUAGE_BITS_4; +#define FIT_LANGUAGE_BITS_4_INVALID FIT_UINT8Z_INVALID +#define FIT_LANGUAGE_BITS_4_BRAZILIAN_PORTUGUESE ((FIT_LANGUAGE_BITS_4)0x01) +#define FIT_LANGUAGE_BITS_4_INDONESIAN ((FIT_LANGUAGE_BITS_4)0x02) +#define FIT_LANGUAGE_BITS_4_MALAYSIAN ((FIT_LANGUAGE_BITS_4)0x04) +#define FIT_LANGUAGE_BITS_4_VIETNAMESE ((FIT_LANGUAGE_BITS_4)0x08) +#define FIT_LANGUAGE_BITS_4_BURMESE ((FIT_LANGUAGE_BITS_4)0x10) +#define FIT_LANGUAGE_BITS_4_MONGOLIAN ((FIT_LANGUAGE_BITS_4)0x20) +#define FIT_LANGUAGE_BITS_4_COUNT 6 + +typedef FIT_ENUM FIT_TIME_ZONE; +#define FIT_TIME_ZONE_INVALID FIT_ENUM_INVALID +#define FIT_TIME_ZONE_ALMATY ((FIT_TIME_ZONE)0) +#define FIT_TIME_ZONE_BANGKOK ((FIT_TIME_ZONE)1) +#define FIT_TIME_ZONE_BOMBAY ((FIT_TIME_ZONE)2) +#define FIT_TIME_ZONE_BRASILIA ((FIT_TIME_ZONE)3) +#define FIT_TIME_ZONE_CAIRO ((FIT_TIME_ZONE)4) +#define FIT_TIME_ZONE_CAPE_VERDE_IS ((FIT_TIME_ZONE)5) +#define FIT_TIME_ZONE_DARWIN ((FIT_TIME_ZONE)6) +#define FIT_TIME_ZONE_ENIWETOK ((FIT_TIME_ZONE)7) +#define FIT_TIME_ZONE_FIJI ((FIT_TIME_ZONE)8) +#define FIT_TIME_ZONE_HONG_KONG ((FIT_TIME_ZONE)9) +#define FIT_TIME_ZONE_ISLAMABAD ((FIT_TIME_ZONE)10) +#define FIT_TIME_ZONE_KABUL ((FIT_TIME_ZONE)11) +#define FIT_TIME_ZONE_MAGADAN ((FIT_TIME_ZONE)12) +#define FIT_TIME_ZONE_MID_ATLANTIC ((FIT_TIME_ZONE)13) +#define FIT_TIME_ZONE_MOSCOW ((FIT_TIME_ZONE)14) +#define FIT_TIME_ZONE_MUSCAT ((FIT_TIME_ZONE)15) +#define FIT_TIME_ZONE_NEWFOUNDLAND ((FIT_TIME_ZONE)16) +#define FIT_TIME_ZONE_SAMOA ((FIT_TIME_ZONE)17) +#define FIT_TIME_ZONE_SYDNEY ((FIT_TIME_ZONE)18) +#define FIT_TIME_ZONE_TEHRAN ((FIT_TIME_ZONE)19) +#define FIT_TIME_ZONE_TOKYO ((FIT_TIME_ZONE)20) +#define FIT_TIME_ZONE_US_ALASKA ((FIT_TIME_ZONE)21) +#define FIT_TIME_ZONE_US_ATLANTIC ((FIT_TIME_ZONE)22) +#define FIT_TIME_ZONE_US_CENTRAL ((FIT_TIME_ZONE)23) +#define FIT_TIME_ZONE_US_EASTERN ((FIT_TIME_ZONE)24) +#define FIT_TIME_ZONE_US_HAWAII ((FIT_TIME_ZONE)25) +#define FIT_TIME_ZONE_US_MOUNTAIN ((FIT_TIME_ZONE)26) +#define FIT_TIME_ZONE_US_PACIFIC ((FIT_TIME_ZONE)27) +#define FIT_TIME_ZONE_OTHER ((FIT_TIME_ZONE)28) +#define FIT_TIME_ZONE_AUCKLAND ((FIT_TIME_ZONE)29) +#define FIT_TIME_ZONE_KATHMANDU ((FIT_TIME_ZONE)30) +#define FIT_TIME_ZONE_EUROPE_WESTERN_WET ((FIT_TIME_ZONE)31) +#define FIT_TIME_ZONE_EUROPE_CENTRAL_CET ((FIT_TIME_ZONE)32) +#define FIT_TIME_ZONE_EUROPE_EASTERN_EET ((FIT_TIME_ZONE)33) +#define FIT_TIME_ZONE_JAKARTA ((FIT_TIME_ZONE)34) +#define FIT_TIME_ZONE_PERTH ((FIT_TIME_ZONE)35) +#define FIT_TIME_ZONE_ADELAIDE ((FIT_TIME_ZONE)36) +#define FIT_TIME_ZONE_BRISBANE ((FIT_TIME_ZONE)37) +#define FIT_TIME_ZONE_TASMANIA ((FIT_TIME_ZONE)38) +#define FIT_TIME_ZONE_ICELAND ((FIT_TIME_ZONE)39) +#define FIT_TIME_ZONE_AMSTERDAM ((FIT_TIME_ZONE)40) +#define FIT_TIME_ZONE_ATHENS ((FIT_TIME_ZONE)41) +#define FIT_TIME_ZONE_BARCELONA ((FIT_TIME_ZONE)42) +#define FIT_TIME_ZONE_BERLIN ((FIT_TIME_ZONE)43) +#define FIT_TIME_ZONE_BRUSSELS ((FIT_TIME_ZONE)44) +#define FIT_TIME_ZONE_BUDAPEST ((FIT_TIME_ZONE)45) +#define FIT_TIME_ZONE_COPENHAGEN ((FIT_TIME_ZONE)46) +#define FIT_TIME_ZONE_DUBLIN ((FIT_TIME_ZONE)47) +#define FIT_TIME_ZONE_HELSINKI ((FIT_TIME_ZONE)48) +#define FIT_TIME_ZONE_LISBON ((FIT_TIME_ZONE)49) +#define FIT_TIME_ZONE_LONDON ((FIT_TIME_ZONE)50) +#define FIT_TIME_ZONE_MADRID ((FIT_TIME_ZONE)51) +#define FIT_TIME_ZONE_MUNICH ((FIT_TIME_ZONE)52) +#define FIT_TIME_ZONE_OSLO ((FIT_TIME_ZONE)53) +#define FIT_TIME_ZONE_PARIS ((FIT_TIME_ZONE)54) +#define FIT_TIME_ZONE_PRAGUE ((FIT_TIME_ZONE)55) +#define FIT_TIME_ZONE_REYKJAVIK ((FIT_TIME_ZONE)56) +#define FIT_TIME_ZONE_ROME ((FIT_TIME_ZONE)57) +#define FIT_TIME_ZONE_STOCKHOLM ((FIT_TIME_ZONE)58) +#define FIT_TIME_ZONE_VIENNA ((FIT_TIME_ZONE)59) +#define FIT_TIME_ZONE_WARSAW ((FIT_TIME_ZONE)60) +#define FIT_TIME_ZONE_ZURICH ((FIT_TIME_ZONE)61) +#define FIT_TIME_ZONE_QUEBEC ((FIT_TIME_ZONE)62) +#define FIT_TIME_ZONE_ONTARIO ((FIT_TIME_ZONE)63) +#define FIT_TIME_ZONE_MANITOBA ((FIT_TIME_ZONE)64) +#define FIT_TIME_ZONE_SASKATCHEWAN ((FIT_TIME_ZONE)65) +#define FIT_TIME_ZONE_ALBERTA ((FIT_TIME_ZONE)66) +#define FIT_TIME_ZONE_BRITISH_COLUMBIA ((FIT_TIME_ZONE)67) +#define FIT_TIME_ZONE_BOISE ((FIT_TIME_ZONE)68) +#define FIT_TIME_ZONE_BOSTON ((FIT_TIME_ZONE)69) +#define FIT_TIME_ZONE_CHICAGO ((FIT_TIME_ZONE)70) +#define FIT_TIME_ZONE_DALLAS ((FIT_TIME_ZONE)71) +#define FIT_TIME_ZONE_DENVER ((FIT_TIME_ZONE)72) +#define FIT_TIME_ZONE_KANSAS_CITY ((FIT_TIME_ZONE)73) +#define FIT_TIME_ZONE_LAS_VEGAS ((FIT_TIME_ZONE)74) +#define FIT_TIME_ZONE_LOS_ANGELES ((FIT_TIME_ZONE)75) +#define FIT_TIME_ZONE_MIAMI ((FIT_TIME_ZONE)76) +#define FIT_TIME_ZONE_MINNEAPOLIS ((FIT_TIME_ZONE)77) +#define FIT_TIME_ZONE_NEW_YORK ((FIT_TIME_ZONE)78) +#define FIT_TIME_ZONE_NEW_ORLEANS ((FIT_TIME_ZONE)79) +#define FIT_TIME_ZONE_PHOENIX ((FIT_TIME_ZONE)80) +#define FIT_TIME_ZONE_SANTA_FE ((FIT_TIME_ZONE)81) +#define FIT_TIME_ZONE_SEATTLE ((FIT_TIME_ZONE)82) +#define FIT_TIME_ZONE_WASHINGTON_DC ((FIT_TIME_ZONE)83) +#define FIT_TIME_ZONE_US_ARIZONA ((FIT_TIME_ZONE)84) +#define FIT_TIME_ZONE_CHITA ((FIT_TIME_ZONE)85) +#define FIT_TIME_ZONE_EKATERINBURG ((FIT_TIME_ZONE)86) +#define FIT_TIME_ZONE_IRKUTSK ((FIT_TIME_ZONE)87) +#define FIT_TIME_ZONE_KALININGRAD ((FIT_TIME_ZONE)88) +#define FIT_TIME_ZONE_KRASNOYARSK ((FIT_TIME_ZONE)89) +#define FIT_TIME_ZONE_NOVOSIBIRSK ((FIT_TIME_ZONE)90) +#define FIT_TIME_ZONE_PETROPAVLOVSK_KAMCHATSKIY ((FIT_TIME_ZONE)91) +#define FIT_TIME_ZONE_SAMARA ((FIT_TIME_ZONE)92) +#define FIT_TIME_ZONE_VLADIVOSTOK ((FIT_TIME_ZONE)93) +#define FIT_TIME_ZONE_MEXICO_CENTRAL ((FIT_TIME_ZONE)94) +#define FIT_TIME_ZONE_MEXICO_MOUNTAIN ((FIT_TIME_ZONE)95) +#define FIT_TIME_ZONE_MEXICO_PACIFIC ((FIT_TIME_ZONE)96) +#define FIT_TIME_ZONE_CAPE_TOWN ((FIT_TIME_ZONE)97) +#define FIT_TIME_ZONE_WINKHOEK ((FIT_TIME_ZONE)98) +#define FIT_TIME_ZONE_LAGOS ((FIT_TIME_ZONE)99) +#define FIT_TIME_ZONE_RIYAHD ((FIT_TIME_ZONE)100) +#define FIT_TIME_ZONE_VENEZUELA ((FIT_TIME_ZONE)101) +#define FIT_TIME_ZONE_AUSTRALIA_LH ((FIT_TIME_ZONE)102) +#define FIT_TIME_ZONE_SANTIAGO ((FIT_TIME_ZONE)103) +#define FIT_TIME_ZONE_MANUAL ((FIT_TIME_ZONE)253) +#define FIT_TIME_ZONE_AUTOMATIC ((FIT_TIME_ZONE)254) +#define FIT_TIME_ZONE_COUNT 106 + +typedef FIT_ENUM FIT_DISPLAY_MEASURE; +#define FIT_DISPLAY_MEASURE_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_MEASURE_METRIC ((FIT_DISPLAY_MEASURE)0) +#define FIT_DISPLAY_MEASURE_STATUTE ((FIT_DISPLAY_MEASURE)1) +#define FIT_DISPLAY_MEASURE_NAUTICAL ((FIT_DISPLAY_MEASURE)2) +#define FIT_DISPLAY_MEASURE_COUNT 3 + +typedef FIT_ENUM FIT_DISPLAY_HEART; +#define FIT_DISPLAY_HEART_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_HEART_BPM ((FIT_DISPLAY_HEART)0) +#define FIT_DISPLAY_HEART_MAX ((FIT_DISPLAY_HEART)1) +#define FIT_DISPLAY_HEART_RESERVE ((FIT_DISPLAY_HEART)2) +#define FIT_DISPLAY_HEART_COUNT 3 + +typedef FIT_ENUM FIT_DISPLAY_POWER; +#define FIT_DISPLAY_POWER_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_POWER_WATTS ((FIT_DISPLAY_POWER)0) +#define FIT_DISPLAY_POWER_PERCENT_FTP ((FIT_DISPLAY_POWER)1) +#define FIT_DISPLAY_POWER_COUNT 2 + +typedef FIT_ENUM FIT_DISPLAY_POSITION; +#define FIT_DISPLAY_POSITION_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_POSITION_DEGREE ((FIT_DISPLAY_POSITION)0) // dd.dddddd +#define FIT_DISPLAY_POSITION_DEGREE_MINUTE ((FIT_DISPLAY_POSITION)1) // dddmm.mmm +#define FIT_DISPLAY_POSITION_DEGREE_MINUTE_SECOND ((FIT_DISPLAY_POSITION)2) // dddmmss +#define FIT_DISPLAY_POSITION_AUSTRIAN_GRID ((FIT_DISPLAY_POSITION)3) // Austrian Grid (BMN) +#define FIT_DISPLAY_POSITION_BRITISH_GRID ((FIT_DISPLAY_POSITION)4) // British National Grid +#define FIT_DISPLAY_POSITION_DUTCH_GRID ((FIT_DISPLAY_POSITION)5) // Dutch grid system +#define FIT_DISPLAY_POSITION_HUNGARIAN_GRID ((FIT_DISPLAY_POSITION)6) // Hungarian grid system +#define FIT_DISPLAY_POSITION_FINNISH_GRID ((FIT_DISPLAY_POSITION)7) // Finnish grid system Zone3 KKJ27 +#define FIT_DISPLAY_POSITION_GERMAN_GRID ((FIT_DISPLAY_POSITION)8) // Gausss Krueger (German) +#define FIT_DISPLAY_POSITION_ICELANDIC_GRID ((FIT_DISPLAY_POSITION)9) // Icelandic Grid +#define FIT_DISPLAY_POSITION_INDONESIAN_EQUATORIAL ((FIT_DISPLAY_POSITION)10) // Indonesian Equatorial LCO +#define FIT_DISPLAY_POSITION_INDONESIAN_IRIAN ((FIT_DISPLAY_POSITION)11) // Indonesian Irian LCO +#define FIT_DISPLAY_POSITION_INDONESIAN_SOUTHERN ((FIT_DISPLAY_POSITION)12) // Indonesian Southern LCO +#define FIT_DISPLAY_POSITION_INDIA_ZONE_0 ((FIT_DISPLAY_POSITION)13) // India zone 0 +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IA ((FIT_DISPLAY_POSITION)14) // India zone IA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IB ((FIT_DISPLAY_POSITION)15) // India zone IB +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIA ((FIT_DISPLAY_POSITION)16) // India zone IIA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIB ((FIT_DISPLAY_POSITION)17) // India zone IIB +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIA ((FIT_DISPLAY_POSITION)18) // India zone IIIA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIB ((FIT_DISPLAY_POSITION)19) // India zone IIIB +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IVA ((FIT_DISPLAY_POSITION)20) // India zone IVA +#define FIT_DISPLAY_POSITION_INDIA_ZONE_IVB ((FIT_DISPLAY_POSITION)21) // India zone IVB +#define FIT_DISPLAY_POSITION_IRISH_TRANSVERSE ((FIT_DISPLAY_POSITION)22) // Irish Transverse Mercator +#define FIT_DISPLAY_POSITION_IRISH_GRID ((FIT_DISPLAY_POSITION)23) // Irish Grid +#define FIT_DISPLAY_POSITION_LORAN ((FIT_DISPLAY_POSITION)24) // Loran TD +#define FIT_DISPLAY_POSITION_MAIDENHEAD_GRID ((FIT_DISPLAY_POSITION)25) // Maidenhead grid system +#define FIT_DISPLAY_POSITION_MGRS_GRID ((FIT_DISPLAY_POSITION)26) // MGRS grid system +#define FIT_DISPLAY_POSITION_NEW_ZEALAND_GRID ((FIT_DISPLAY_POSITION)27) // New Zealand grid system +#define FIT_DISPLAY_POSITION_NEW_ZEALAND_TRANSVERSE ((FIT_DISPLAY_POSITION)28) // New Zealand Transverse Mercator +#define FIT_DISPLAY_POSITION_QATAR_GRID ((FIT_DISPLAY_POSITION)29) // Qatar National Grid +#define FIT_DISPLAY_POSITION_MODIFIED_SWEDISH_GRID ((FIT_DISPLAY_POSITION)30) // Modified RT-90 (Sweden) +#define FIT_DISPLAY_POSITION_SWEDISH_GRID ((FIT_DISPLAY_POSITION)31) // RT-90 (Sweden) +#define FIT_DISPLAY_POSITION_SOUTH_AFRICAN_GRID ((FIT_DISPLAY_POSITION)32) // South African Grid +#define FIT_DISPLAY_POSITION_SWISS_GRID ((FIT_DISPLAY_POSITION)33) // Swiss CH-1903 grid +#define FIT_DISPLAY_POSITION_TAIWAN_GRID ((FIT_DISPLAY_POSITION)34) // Taiwan Grid +#define FIT_DISPLAY_POSITION_UNITED_STATES_GRID ((FIT_DISPLAY_POSITION)35) // United States National Grid +#define FIT_DISPLAY_POSITION_UTM_UPS_GRID ((FIT_DISPLAY_POSITION)36) // UTM/UPS grid system +#define FIT_DISPLAY_POSITION_WEST_MALAYAN ((FIT_DISPLAY_POSITION)37) // West Malayan RSO +#define FIT_DISPLAY_POSITION_BORNEO_RSO ((FIT_DISPLAY_POSITION)38) // Borneo RSO +#define FIT_DISPLAY_POSITION_ESTONIAN_GRID ((FIT_DISPLAY_POSITION)39) // Estonian grid system +#define FIT_DISPLAY_POSITION_LATVIAN_GRID ((FIT_DISPLAY_POSITION)40) // Latvian Transverse Mercator +#define FIT_DISPLAY_POSITION_SWEDISH_REF_99_GRID ((FIT_DISPLAY_POSITION)41) // Reference Grid 99 TM (Swedish) +#define FIT_DISPLAY_POSITION_COUNT 42 + +typedef FIT_ENUM FIT_SWITCH; +#define FIT_SWITCH_INVALID FIT_ENUM_INVALID +#define FIT_SWITCH_OFF ((FIT_SWITCH)0) +#define FIT_SWITCH_ON ((FIT_SWITCH)1) +#define FIT_SWITCH_AUTO ((FIT_SWITCH)2) +#define FIT_SWITCH_COUNT 3 + +typedef FIT_ENUM FIT_SPORT; +#define FIT_SPORT_INVALID FIT_ENUM_INVALID +#define FIT_SPORT_GENERIC ((FIT_SPORT)0) +#define FIT_SPORT_RUNNING ((FIT_SPORT)1) +#define FIT_SPORT_CYCLING ((FIT_SPORT)2) +#define FIT_SPORT_TRANSITION ((FIT_SPORT)3) // Mulitsport transition +#define FIT_SPORT_FITNESS_EQUIPMENT ((FIT_SPORT)4) +#define FIT_SPORT_SWIMMING ((FIT_SPORT)5) +#define FIT_SPORT_BASKETBALL ((FIT_SPORT)6) +#define FIT_SPORT_SOCCER ((FIT_SPORT)7) +#define FIT_SPORT_TENNIS ((FIT_SPORT)8) +#define FIT_SPORT_AMERICAN_FOOTBALL ((FIT_SPORT)9) +#define FIT_SPORT_TRAINING ((FIT_SPORT)10) +#define FIT_SPORT_WALKING ((FIT_SPORT)11) +#define FIT_SPORT_CROSS_COUNTRY_SKIING ((FIT_SPORT)12) +#define FIT_SPORT_ALPINE_SKIING ((FIT_SPORT)13) +#define FIT_SPORT_SNOWBOARDING ((FIT_SPORT)14) +#define FIT_SPORT_ROWING ((FIT_SPORT)15) +#define FIT_SPORT_MOUNTAINEERING ((FIT_SPORT)16) +#define FIT_SPORT_HIKING ((FIT_SPORT)17) +#define FIT_SPORT_MULTISPORT ((FIT_SPORT)18) +#define FIT_SPORT_PADDLING ((FIT_SPORT)19) +#define FIT_SPORT_FLYING ((FIT_SPORT)20) +#define FIT_SPORT_E_BIKING ((FIT_SPORT)21) +#define FIT_SPORT_MOTORCYCLING ((FIT_SPORT)22) +#define FIT_SPORT_BOATING ((FIT_SPORT)23) +#define FIT_SPORT_DRIVING ((FIT_SPORT)24) +#define FIT_SPORT_GOLF ((FIT_SPORT)25) +#define FIT_SPORT_HANG_GLIDING ((FIT_SPORT)26) +#define FIT_SPORT_HORSEBACK_RIDING ((FIT_SPORT)27) +#define FIT_SPORT_HUNTING ((FIT_SPORT)28) +#define FIT_SPORT_FISHING ((FIT_SPORT)29) +#define FIT_SPORT_INLINE_SKATING ((FIT_SPORT)30) +#define FIT_SPORT_ROCK_CLIMBING ((FIT_SPORT)31) +#define FIT_SPORT_SAILING ((FIT_SPORT)32) +#define FIT_SPORT_ICE_SKATING ((FIT_SPORT)33) +#define FIT_SPORT_SKY_DIVING ((FIT_SPORT)34) +#define FIT_SPORT_SNOWSHOEING ((FIT_SPORT)35) +#define FIT_SPORT_SNOWMOBILING ((FIT_SPORT)36) +#define FIT_SPORT_STAND_UP_PADDLEBOARDING ((FIT_SPORT)37) +#define FIT_SPORT_SURFING ((FIT_SPORT)38) +#define FIT_SPORT_WAKEBOARDING ((FIT_SPORT)39) +#define FIT_SPORT_WATER_SKIING ((FIT_SPORT)40) +#define FIT_SPORT_KAYAKING ((FIT_SPORT)41) +#define FIT_SPORT_RAFTING ((FIT_SPORT)42) +#define FIT_SPORT_WINDSURFING ((FIT_SPORT)43) +#define FIT_SPORT_KITESURFING ((FIT_SPORT)44) +#define FIT_SPORT_TACTICAL ((FIT_SPORT)45) +#define FIT_SPORT_JUMPMASTER ((FIT_SPORT)46) +#define FIT_SPORT_BOXING ((FIT_SPORT)47) +#define FIT_SPORT_FLOOR_CLIMBING ((FIT_SPORT)48) +#define FIT_SPORT_DIVING ((FIT_SPORT)53) +#define FIT_SPORT_ALL ((FIT_SPORT)254) // All is for goals only to include all sports. +#define FIT_SPORT_COUNT 51 + +typedef FIT_UINT8Z FIT_SPORT_BITS_0; // Bit field corresponding to sport enum type (1 << sport). +#define FIT_SPORT_BITS_0_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_0_GENERIC ((FIT_SPORT_BITS_0)0x01) +#define FIT_SPORT_BITS_0_RUNNING ((FIT_SPORT_BITS_0)0x02) +#define FIT_SPORT_BITS_0_CYCLING ((FIT_SPORT_BITS_0)0x04) +#define FIT_SPORT_BITS_0_TRANSITION ((FIT_SPORT_BITS_0)0x08) // Mulitsport transition +#define FIT_SPORT_BITS_0_FITNESS_EQUIPMENT ((FIT_SPORT_BITS_0)0x10) +#define FIT_SPORT_BITS_0_SWIMMING ((FIT_SPORT_BITS_0)0x20) +#define FIT_SPORT_BITS_0_BASKETBALL ((FIT_SPORT_BITS_0)0x40) +#define FIT_SPORT_BITS_0_SOCCER ((FIT_SPORT_BITS_0)0x80) +#define FIT_SPORT_BITS_0_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_1; // Bit field corresponding to sport enum type (1 << (sport-8)). +#define FIT_SPORT_BITS_1_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_1_TENNIS ((FIT_SPORT_BITS_1)0x01) +#define FIT_SPORT_BITS_1_AMERICAN_FOOTBALL ((FIT_SPORT_BITS_1)0x02) +#define FIT_SPORT_BITS_1_TRAINING ((FIT_SPORT_BITS_1)0x04) +#define FIT_SPORT_BITS_1_WALKING ((FIT_SPORT_BITS_1)0x08) +#define FIT_SPORT_BITS_1_CROSS_COUNTRY_SKIING ((FIT_SPORT_BITS_1)0x10) +#define FIT_SPORT_BITS_1_ALPINE_SKIING ((FIT_SPORT_BITS_1)0x20) +#define FIT_SPORT_BITS_1_SNOWBOARDING ((FIT_SPORT_BITS_1)0x40) +#define FIT_SPORT_BITS_1_ROWING ((FIT_SPORT_BITS_1)0x80) +#define FIT_SPORT_BITS_1_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_2; // Bit field corresponding to sport enum type (1 << (sport-16)). +#define FIT_SPORT_BITS_2_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_2_MOUNTAINEERING ((FIT_SPORT_BITS_2)0x01) +#define FIT_SPORT_BITS_2_HIKING ((FIT_SPORT_BITS_2)0x02) +#define FIT_SPORT_BITS_2_MULTISPORT ((FIT_SPORT_BITS_2)0x04) +#define FIT_SPORT_BITS_2_PADDLING ((FIT_SPORT_BITS_2)0x08) +#define FIT_SPORT_BITS_2_FLYING ((FIT_SPORT_BITS_2)0x10) +#define FIT_SPORT_BITS_2_E_BIKING ((FIT_SPORT_BITS_2)0x20) +#define FIT_SPORT_BITS_2_MOTORCYCLING ((FIT_SPORT_BITS_2)0x40) +#define FIT_SPORT_BITS_2_BOATING ((FIT_SPORT_BITS_2)0x80) +#define FIT_SPORT_BITS_2_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_3; // Bit field corresponding to sport enum type (1 << (sport-24)). +#define FIT_SPORT_BITS_3_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_3_DRIVING ((FIT_SPORT_BITS_3)0x01) +#define FIT_SPORT_BITS_3_GOLF ((FIT_SPORT_BITS_3)0x02) +#define FIT_SPORT_BITS_3_HANG_GLIDING ((FIT_SPORT_BITS_3)0x04) +#define FIT_SPORT_BITS_3_HORSEBACK_RIDING ((FIT_SPORT_BITS_3)0x08) +#define FIT_SPORT_BITS_3_HUNTING ((FIT_SPORT_BITS_3)0x10) +#define FIT_SPORT_BITS_3_FISHING ((FIT_SPORT_BITS_3)0x20) +#define FIT_SPORT_BITS_3_INLINE_SKATING ((FIT_SPORT_BITS_3)0x40) +#define FIT_SPORT_BITS_3_ROCK_CLIMBING ((FIT_SPORT_BITS_3)0x80) +#define FIT_SPORT_BITS_3_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_4; // Bit field corresponding to sport enum type (1 << (sport-32)). +#define FIT_SPORT_BITS_4_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_4_SAILING ((FIT_SPORT_BITS_4)0x01) +#define FIT_SPORT_BITS_4_ICE_SKATING ((FIT_SPORT_BITS_4)0x02) +#define FIT_SPORT_BITS_4_SKY_DIVING ((FIT_SPORT_BITS_4)0x04) +#define FIT_SPORT_BITS_4_SNOWSHOEING ((FIT_SPORT_BITS_4)0x08) +#define FIT_SPORT_BITS_4_SNOWMOBILING ((FIT_SPORT_BITS_4)0x10) +#define FIT_SPORT_BITS_4_STAND_UP_PADDLEBOARDING ((FIT_SPORT_BITS_4)0x20) +#define FIT_SPORT_BITS_4_SURFING ((FIT_SPORT_BITS_4)0x40) +#define FIT_SPORT_BITS_4_WAKEBOARDING ((FIT_SPORT_BITS_4)0x80) +#define FIT_SPORT_BITS_4_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_5; // Bit field corresponding to sport enum type (1 << (sport-40)). +#define FIT_SPORT_BITS_5_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_5_WATER_SKIING ((FIT_SPORT_BITS_5)0x01) +#define FIT_SPORT_BITS_5_KAYAKING ((FIT_SPORT_BITS_5)0x02) +#define FIT_SPORT_BITS_5_RAFTING ((FIT_SPORT_BITS_5)0x04) +#define FIT_SPORT_BITS_5_WINDSURFING ((FIT_SPORT_BITS_5)0x08) +#define FIT_SPORT_BITS_5_KITESURFING ((FIT_SPORT_BITS_5)0x10) +#define FIT_SPORT_BITS_5_TACTICAL ((FIT_SPORT_BITS_5)0x20) +#define FIT_SPORT_BITS_5_JUMPMASTER ((FIT_SPORT_BITS_5)0x40) +#define FIT_SPORT_BITS_5_BOXING ((FIT_SPORT_BITS_5)0x80) +#define FIT_SPORT_BITS_5_COUNT 8 + +typedef FIT_UINT8Z FIT_SPORT_BITS_6; // Bit field corresponding to sport enum type (1 << (sport-48)). +#define FIT_SPORT_BITS_6_INVALID FIT_UINT8Z_INVALID +#define FIT_SPORT_BITS_6_FLOOR_CLIMBING ((FIT_SPORT_BITS_6)0x01) +#define FIT_SPORT_BITS_6_COUNT 1 + +typedef FIT_ENUM FIT_SUB_SPORT; +#define FIT_SUB_SPORT_INVALID FIT_ENUM_INVALID +#define FIT_SUB_SPORT_GENERIC ((FIT_SUB_SPORT)0) +#define FIT_SUB_SPORT_TREADMILL ((FIT_SUB_SPORT)1) // Run/Fitness Equipment +#define FIT_SUB_SPORT_STREET ((FIT_SUB_SPORT)2) // Run +#define FIT_SUB_SPORT_TRAIL ((FIT_SUB_SPORT)3) // Run +#define FIT_SUB_SPORT_TRACK ((FIT_SUB_SPORT)4) // Run +#define FIT_SUB_SPORT_SPIN ((FIT_SUB_SPORT)5) // Cycling +#define FIT_SUB_SPORT_INDOOR_CYCLING ((FIT_SUB_SPORT)6) // Cycling/Fitness Equipment +#define FIT_SUB_SPORT_ROAD ((FIT_SUB_SPORT)7) // Cycling +#define FIT_SUB_SPORT_MOUNTAIN ((FIT_SUB_SPORT)8) // Cycling +#define FIT_SUB_SPORT_DOWNHILL ((FIT_SUB_SPORT)9) // Cycling +#define FIT_SUB_SPORT_RECUMBENT ((FIT_SUB_SPORT)10) // Cycling +#define FIT_SUB_SPORT_CYCLOCROSS ((FIT_SUB_SPORT)11) // Cycling +#define FIT_SUB_SPORT_HAND_CYCLING ((FIT_SUB_SPORT)12) // Cycling +#define FIT_SUB_SPORT_TRACK_CYCLING ((FIT_SUB_SPORT)13) // Cycling +#define FIT_SUB_SPORT_INDOOR_ROWING ((FIT_SUB_SPORT)14) // Fitness Equipment +#define FIT_SUB_SPORT_ELLIPTICAL ((FIT_SUB_SPORT)15) // Fitness Equipment +#define FIT_SUB_SPORT_STAIR_CLIMBING ((FIT_SUB_SPORT)16) // Fitness Equipment +#define FIT_SUB_SPORT_LAP_SWIMMING ((FIT_SUB_SPORT)17) // Swimming +#define FIT_SUB_SPORT_OPEN_WATER ((FIT_SUB_SPORT)18) // Swimming +#define FIT_SUB_SPORT_FLEXIBILITY_TRAINING ((FIT_SUB_SPORT)19) // Training +#define FIT_SUB_SPORT_STRENGTH_TRAINING ((FIT_SUB_SPORT)20) // Training +#define FIT_SUB_SPORT_WARM_UP ((FIT_SUB_SPORT)21) // Tennis +#define FIT_SUB_SPORT_MATCH ((FIT_SUB_SPORT)22) // Tennis +#define FIT_SUB_SPORT_EXERCISE ((FIT_SUB_SPORT)23) // Tennis +#define FIT_SUB_SPORT_CHALLENGE ((FIT_SUB_SPORT)24) +#define FIT_SUB_SPORT_INDOOR_SKIING ((FIT_SUB_SPORT)25) // Fitness Equipment +#define FIT_SUB_SPORT_CARDIO_TRAINING ((FIT_SUB_SPORT)26) // Training +#define FIT_SUB_SPORT_INDOOR_WALKING ((FIT_SUB_SPORT)27) // Walking/Fitness Equipment +#define FIT_SUB_SPORT_E_BIKE_FITNESS ((FIT_SUB_SPORT)28) // E-Biking +#define FIT_SUB_SPORT_BMX ((FIT_SUB_SPORT)29) // Cycling +#define FIT_SUB_SPORT_CASUAL_WALKING ((FIT_SUB_SPORT)30) // Walking +#define FIT_SUB_SPORT_SPEED_WALKING ((FIT_SUB_SPORT)31) // Walking +#define FIT_SUB_SPORT_BIKE_TO_RUN_TRANSITION ((FIT_SUB_SPORT)32) // Transition +#define FIT_SUB_SPORT_RUN_TO_BIKE_TRANSITION ((FIT_SUB_SPORT)33) // Transition +#define FIT_SUB_SPORT_SWIM_TO_BIKE_TRANSITION ((FIT_SUB_SPORT)34) // Transition +#define FIT_SUB_SPORT_ATV ((FIT_SUB_SPORT)35) // Motorcycling +#define FIT_SUB_SPORT_MOTOCROSS ((FIT_SUB_SPORT)36) // Motorcycling +#define FIT_SUB_SPORT_BACKCOUNTRY ((FIT_SUB_SPORT)37) // Alpine Skiing/Snowboarding +#define FIT_SUB_SPORT_RESORT ((FIT_SUB_SPORT)38) // Alpine Skiing/Snowboarding +#define FIT_SUB_SPORT_RC_DRONE ((FIT_SUB_SPORT)39) // Flying +#define FIT_SUB_SPORT_WINGSUIT ((FIT_SUB_SPORT)40) // Flying +#define FIT_SUB_SPORT_WHITEWATER ((FIT_SUB_SPORT)41) // Kayaking/Rafting +#define FIT_SUB_SPORT_SKATE_SKIING ((FIT_SUB_SPORT)42) // Cross Country Skiing +#define FIT_SUB_SPORT_YOGA ((FIT_SUB_SPORT)43) // Training +#define FIT_SUB_SPORT_PILATES ((FIT_SUB_SPORT)44) // Fitness Equipment +#define FIT_SUB_SPORT_INDOOR_RUNNING ((FIT_SUB_SPORT)45) // Run +#define FIT_SUB_SPORT_GRAVEL_CYCLING ((FIT_SUB_SPORT)46) // Cycling +#define FIT_SUB_SPORT_E_BIKE_MOUNTAIN ((FIT_SUB_SPORT)47) // Cycling +#define FIT_SUB_SPORT_COMMUTING ((FIT_SUB_SPORT)48) // Cycling +#define FIT_SUB_SPORT_MIXED_SURFACE ((FIT_SUB_SPORT)49) // Cycling +#define FIT_SUB_SPORT_NAVIGATE ((FIT_SUB_SPORT)50) +#define FIT_SUB_SPORT_TRACK_ME ((FIT_SUB_SPORT)51) +#define FIT_SUB_SPORT_MAP ((FIT_SUB_SPORT)52) +#define FIT_SUB_SPORT_SINGLE_GAS_DIVING ((FIT_SUB_SPORT)53) // Diving +#define FIT_SUB_SPORT_MULTI_GAS_DIVING ((FIT_SUB_SPORT)54) // Diving +#define FIT_SUB_SPORT_GAUGE_DIVING ((FIT_SUB_SPORT)55) // Diving +#define FIT_SUB_SPORT_APNEA_DIVING ((FIT_SUB_SPORT)56) // Diving +#define FIT_SUB_SPORT_APNEA_HUNTING ((FIT_SUB_SPORT)57) // Diving +#define FIT_SUB_SPORT_VIRTUAL_ACTIVITY ((FIT_SUB_SPORT)58) +#define FIT_SUB_SPORT_OBSTACLE ((FIT_SUB_SPORT)59) // Used for events where participants run, crawl through mud, climb over walls, etc. +#define FIT_SUB_SPORT_BREATHING ((FIT_SUB_SPORT)62) +#define FIT_SUB_SPORT_SAIL_RACE ((FIT_SUB_SPORT)65) // Sailing +#define FIT_SUB_SPORT_ULTRA ((FIT_SUB_SPORT)67) // Ultramarathon +#define FIT_SUB_SPORT_INDOOR_CLIMBING ((FIT_SUB_SPORT)68) // Climbing +#define FIT_SUB_SPORT_BOULDERING ((FIT_SUB_SPORT)69) // Climbing +#define FIT_SUB_SPORT_ALL ((FIT_SUB_SPORT)254) +#define FIT_SUB_SPORT_COUNT 66 + +typedef FIT_ENUM FIT_SPORT_EVENT; +#define FIT_SPORT_EVENT_INVALID FIT_ENUM_INVALID +#define FIT_SPORT_EVENT_UNCATEGORIZED ((FIT_SPORT_EVENT)0) +#define FIT_SPORT_EVENT_GEOCACHING ((FIT_SPORT_EVENT)1) +#define FIT_SPORT_EVENT_FITNESS ((FIT_SPORT_EVENT)2) +#define FIT_SPORT_EVENT_RECREATION ((FIT_SPORT_EVENT)3) +#define FIT_SPORT_EVENT_RACE ((FIT_SPORT_EVENT)4) +#define FIT_SPORT_EVENT_SPECIAL_EVENT ((FIT_SPORT_EVENT)5) +#define FIT_SPORT_EVENT_TRAINING ((FIT_SPORT_EVENT)6) +#define FIT_SPORT_EVENT_TRANSPORTATION ((FIT_SPORT_EVENT)7) +#define FIT_SPORT_EVENT_TOURING ((FIT_SPORT_EVENT)8) +#define FIT_SPORT_EVENT_COUNT 9 + +typedef FIT_ENUM FIT_ACTIVITY; +#define FIT_ACTIVITY_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_MANUAL ((FIT_ACTIVITY)0) +#define FIT_ACTIVITY_AUTO_MULTI_SPORT ((FIT_ACTIVITY)1) +#define FIT_ACTIVITY_COUNT 2 + +typedef FIT_ENUM FIT_INTENSITY; +#define FIT_INTENSITY_INVALID FIT_ENUM_INVALID +#define FIT_INTENSITY_ACTIVE ((FIT_INTENSITY)0) +#define FIT_INTENSITY_REST ((FIT_INTENSITY)1) +#define FIT_INTENSITY_WARMUP ((FIT_INTENSITY)2) +#define FIT_INTENSITY_COOLDOWN ((FIT_INTENSITY)3) +#define FIT_INTENSITY_RECOVERY ((FIT_INTENSITY)4) +#define FIT_INTENSITY_INTERVAL ((FIT_INTENSITY)5) +#define FIT_INTENSITY_OTHER ((FIT_INTENSITY)6) +#define FIT_INTENSITY_COUNT 7 + +typedef FIT_ENUM FIT_SESSION_TRIGGER; +#define FIT_SESSION_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_SESSION_TRIGGER_ACTIVITY_END ((FIT_SESSION_TRIGGER)0) +#define FIT_SESSION_TRIGGER_MANUAL ((FIT_SESSION_TRIGGER)1) // User changed sport. +#define FIT_SESSION_TRIGGER_AUTO_MULTI_SPORT ((FIT_SESSION_TRIGGER)2) // Auto multi-sport feature is enabled and user pressed lap button to advance session. +#define FIT_SESSION_TRIGGER_FITNESS_EQUIPMENT ((FIT_SESSION_TRIGGER)3) // Auto sport change caused by user linking to fitness equipment. +#define FIT_SESSION_TRIGGER_COUNT 4 + +typedef FIT_ENUM FIT_AUTOLAP_TRIGGER; +#define FIT_AUTOLAP_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_AUTOLAP_TRIGGER_TIME ((FIT_AUTOLAP_TRIGGER)0) +#define FIT_AUTOLAP_TRIGGER_DISTANCE ((FIT_AUTOLAP_TRIGGER)1) +#define FIT_AUTOLAP_TRIGGER_POSITION_START ((FIT_AUTOLAP_TRIGGER)2) +#define FIT_AUTOLAP_TRIGGER_POSITION_LAP ((FIT_AUTOLAP_TRIGGER)3) +#define FIT_AUTOLAP_TRIGGER_POSITION_WAYPOINT ((FIT_AUTOLAP_TRIGGER)4) +#define FIT_AUTOLAP_TRIGGER_POSITION_MARKED ((FIT_AUTOLAP_TRIGGER)5) +#define FIT_AUTOLAP_TRIGGER_OFF ((FIT_AUTOLAP_TRIGGER)6) +#define FIT_AUTOLAP_TRIGGER_COUNT 7 + +typedef FIT_ENUM FIT_LAP_TRIGGER; +#define FIT_LAP_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_LAP_TRIGGER_MANUAL ((FIT_LAP_TRIGGER)0) +#define FIT_LAP_TRIGGER_TIME ((FIT_LAP_TRIGGER)1) +#define FIT_LAP_TRIGGER_DISTANCE ((FIT_LAP_TRIGGER)2) +#define FIT_LAP_TRIGGER_POSITION_START ((FIT_LAP_TRIGGER)3) +#define FIT_LAP_TRIGGER_POSITION_LAP ((FIT_LAP_TRIGGER)4) +#define FIT_LAP_TRIGGER_POSITION_WAYPOINT ((FIT_LAP_TRIGGER)5) +#define FIT_LAP_TRIGGER_POSITION_MARKED ((FIT_LAP_TRIGGER)6) +#define FIT_LAP_TRIGGER_SESSION_END ((FIT_LAP_TRIGGER)7) +#define FIT_LAP_TRIGGER_FITNESS_EQUIPMENT ((FIT_LAP_TRIGGER)8) +#define FIT_LAP_TRIGGER_COUNT 9 + +typedef FIT_ENUM FIT_TIME_MODE; +#define FIT_TIME_MODE_INVALID FIT_ENUM_INVALID +#define FIT_TIME_MODE_HOUR12 ((FIT_TIME_MODE)0) +#define FIT_TIME_MODE_HOUR24 ((FIT_TIME_MODE)1) // Does not use a leading zero and has a colon +#define FIT_TIME_MODE_MILITARY ((FIT_TIME_MODE)2) // Uses a leading zero and does not have a colon +#define FIT_TIME_MODE_HOUR_12_WITH_SECONDS ((FIT_TIME_MODE)3) +#define FIT_TIME_MODE_HOUR_24_WITH_SECONDS ((FIT_TIME_MODE)4) +#define FIT_TIME_MODE_UTC ((FIT_TIME_MODE)5) +#define FIT_TIME_MODE_COUNT 6 + +typedef FIT_ENUM FIT_BACKLIGHT_MODE; +#define FIT_BACKLIGHT_MODE_INVALID FIT_ENUM_INVALID +#define FIT_BACKLIGHT_MODE_OFF ((FIT_BACKLIGHT_MODE)0) +#define FIT_BACKLIGHT_MODE_MANUAL ((FIT_BACKLIGHT_MODE)1) +#define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES ((FIT_BACKLIGHT_MODE)2) +#define FIT_BACKLIGHT_MODE_AUTO_BRIGHTNESS ((FIT_BACKLIGHT_MODE)3) +#define FIT_BACKLIGHT_MODE_SMART_NOTIFICATIONS ((FIT_BACKLIGHT_MODE)4) +#define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES_NIGHT ((FIT_BACKLIGHT_MODE)5) +#define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES_AND_SMART_NOTIFICATIONS ((FIT_BACKLIGHT_MODE)6) +#define FIT_BACKLIGHT_MODE_COUNT 7 + +typedef FIT_ENUM FIT_DATE_MODE; +#define FIT_DATE_MODE_INVALID FIT_ENUM_INVALID +#define FIT_DATE_MODE_DAY_MONTH ((FIT_DATE_MODE)0) +#define FIT_DATE_MODE_MONTH_DAY ((FIT_DATE_MODE)1) +#define FIT_DATE_MODE_COUNT 2 + +typedef FIT_UINT8 FIT_BACKLIGHT_TIMEOUT; // Timeout in seconds. +#define FIT_BACKLIGHT_TIMEOUT_INVALID FIT_UINT8_INVALID +#define FIT_BACKLIGHT_TIMEOUT_INFINITE ((FIT_BACKLIGHT_TIMEOUT)0) // Backlight stays on forever. +#define FIT_BACKLIGHT_TIMEOUT_COUNT 1 + +typedef FIT_ENUM FIT_EVENT; +#define FIT_EVENT_INVALID FIT_ENUM_INVALID +#define FIT_EVENT_TIMER ((FIT_EVENT)0) // Group 0. Start / stop_all +#define FIT_EVENT_WORKOUT ((FIT_EVENT)3) // start / stop +#define FIT_EVENT_WORKOUT_STEP ((FIT_EVENT)4) // Start at beginning of workout. Stop at end of each step. +#define FIT_EVENT_POWER_DOWN ((FIT_EVENT)5) // stop_all group 0 +#define FIT_EVENT_POWER_UP ((FIT_EVENT)6) // stop_all group 0 +#define FIT_EVENT_OFF_COURSE ((FIT_EVENT)7) // start / stop group 0 +#define FIT_EVENT_SESSION ((FIT_EVENT)8) // Stop at end of each session. +#define FIT_EVENT_LAP ((FIT_EVENT)9) // Stop at end of each lap. +#define FIT_EVENT_COURSE_POINT ((FIT_EVENT)10) // marker +#define FIT_EVENT_BATTERY ((FIT_EVENT)11) // marker +#define FIT_EVENT_VIRTUAL_PARTNER_PACE ((FIT_EVENT)12) // Group 1. Start at beginning of activity if VP enabled, when VP pace is changed during activity or VP enabled mid activity. stop_disable when VP disabled. +#define FIT_EVENT_HR_HIGH_ALERT ((FIT_EVENT)13) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_HR_LOW_ALERT ((FIT_EVENT)14) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_SPEED_HIGH_ALERT ((FIT_EVENT)15) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_SPEED_LOW_ALERT ((FIT_EVENT)16) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_CAD_HIGH_ALERT ((FIT_EVENT)17) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_CAD_LOW_ALERT ((FIT_EVENT)18) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_POWER_HIGH_ALERT ((FIT_EVENT)19) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_POWER_LOW_ALERT ((FIT_EVENT)20) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_RECOVERY_HR ((FIT_EVENT)21) // marker +#define FIT_EVENT_BATTERY_LOW ((FIT_EVENT)22) // marker +#define FIT_EVENT_TIME_DURATION_ALERT ((FIT_EVENT)23) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FIT_EVENT_DISTANCE_DURATION_ALERT ((FIT_EVENT)24) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FIT_EVENT_CALORIE_DURATION_ALERT ((FIT_EVENT)25) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled. +#define FIT_EVENT_ACTIVITY ((FIT_EVENT)26) // Group 1.. Stop at end of activity. +#define FIT_EVENT_FITNESS_EQUIPMENT ((FIT_EVENT)27) // marker +#define FIT_EVENT_LENGTH ((FIT_EVENT)28) // Stop at end of each length. +#define FIT_EVENT_USER_MARKER ((FIT_EVENT)32) // marker +#define FIT_EVENT_SPORT_POINT ((FIT_EVENT)33) // marker +#define FIT_EVENT_CALIBRATION ((FIT_EVENT)36) // start/stop/marker +#define FIT_EVENT_FRONT_GEAR_CHANGE ((FIT_EVENT)42) // marker +#define FIT_EVENT_REAR_GEAR_CHANGE ((FIT_EVENT)43) // marker +#define FIT_EVENT_RIDER_POSITION_CHANGE ((FIT_EVENT)44) // marker +#define FIT_EVENT_ELEV_HIGH_ALERT ((FIT_EVENT)45) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_ELEV_LOW_ALERT ((FIT_EVENT)46) // Group 0. Start / stop when in alert condition. +#define FIT_EVENT_COMM_TIMEOUT ((FIT_EVENT)47) // marker +#define FIT_EVENT_RADAR_THREAT_ALERT ((FIT_EVENT)75) // start/stop/marker +#define FIT_EVENT_COUNT 37 + +typedef FIT_ENUM FIT_EVENT_TYPE; +#define FIT_EVENT_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_EVENT_TYPE_START ((FIT_EVENT_TYPE)0) +#define FIT_EVENT_TYPE_STOP ((FIT_EVENT_TYPE)1) +#define FIT_EVENT_TYPE_CONSECUTIVE_DEPRECIATED ((FIT_EVENT_TYPE)2) +#define FIT_EVENT_TYPE_MARKER ((FIT_EVENT_TYPE)3) +#define FIT_EVENT_TYPE_STOP_ALL ((FIT_EVENT_TYPE)4) +#define FIT_EVENT_TYPE_BEGIN_DEPRECIATED ((FIT_EVENT_TYPE)5) +#define FIT_EVENT_TYPE_END_DEPRECIATED ((FIT_EVENT_TYPE)6) +#define FIT_EVENT_TYPE_END_ALL_DEPRECIATED ((FIT_EVENT_TYPE)7) +#define FIT_EVENT_TYPE_STOP_DISABLE ((FIT_EVENT_TYPE)8) +#define FIT_EVENT_TYPE_STOP_DISABLE_ALL ((FIT_EVENT_TYPE)9) +#define FIT_EVENT_TYPE_COUNT 10 + +typedef FIT_ENUM FIT_TIMER_TRIGGER; // timer event data +#define FIT_TIMER_TRIGGER_INVALID FIT_ENUM_INVALID +#define FIT_TIMER_TRIGGER_MANUAL ((FIT_TIMER_TRIGGER)0) +#define FIT_TIMER_TRIGGER_AUTO ((FIT_TIMER_TRIGGER)1) +#define FIT_TIMER_TRIGGER_FITNESS_EQUIPMENT ((FIT_TIMER_TRIGGER)2) +#define FIT_TIMER_TRIGGER_COUNT 3 + +typedef FIT_ENUM FIT_FITNESS_EQUIPMENT_STATE; // fitness equipment event data +#define FIT_FITNESS_EQUIPMENT_STATE_INVALID FIT_ENUM_INVALID +#define FIT_FITNESS_EQUIPMENT_STATE_READY ((FIT_FITNESS_EQUIPMENT_STATE)0) +#define FIT_FITNESS_EQUIPMENT_STATE_IN_USE ((FIT_FITNESS_EQUIPMENT_STATE)1) +#define FIT_FITNESS_EQUIPMENT_STATE_PAUSED ((FIT_FITNESS_EQUIPMENT_STATE)2) +#define FIT_FITNESS_EQUIPMENT_STATE_UNKNOWN ((FIT_FITNESS_EQUIPMENT_STATE)3) // lost connection to fitness equipment +#define FIT_FITNESS_EQUIPMENT_STATE_COUNT 4 + +typedef FIT_ENUM FIT_TONE; +#define FIT_TONE_INVALID FIT_ENUM_INVALID +#define FIT_TONE_OFF ((FIT_TONE)0) +#define FIT_TONE_TONE ((FIT_TONE)1) +#define FIT_TONE_VIBRATE ((FIT_TONE)2) +#define FIT_TONE_TONE_AND_VIBRATE ((FIT_TONE)3) +#define FIT_TONE_COUNT 4 + +typedef FIT_ENUM FIT_AUTOSCROLL; +#define FIT_AUTOSCROLL_INVALID FIT_ENUM_INVALID +#define FIT_AUTOSCROLL_NONE ((FIT_AUTOSCROLL)0) +#define FIT_AUTOSCROLL_SLOW ((FIT_AUTOSCROLL)1) +#define FIT_AUTOSCROLL_MEDIUM ((FIT_AUTOSCROLL)2) +#define FIT_AUTOSCROLL_FAST ((FIT_AUTOSCROLL)3) +#define FIT_AUTOSCROLL_COUNT 4 + +typedef FIT_ENUM FIT_ACTIVITY_CLASS; +#define FIT_ACTIVITY_CLASS_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_CLASS_LEVEL ((FIT_ACTIVITY_CLASS)0x7F) // 0 to 100 +#define FIT_ACTIVITY_CLASS_LEVEL_MAX ((FIT_ACTIVITY_CLASS)100) +#define FIT_ACTIVITY_CLASS_ATHLETE ((FIT_ACTIVITY_CLASS)0x80) +#define FIT_ACTIVITY_CLASS_COUNT 3 + +typedef FIT_ENUM FIT_HR_ZONE_CALC; +#define FIT_HR_ZONE_CALC_INVALID FIT_ENUM_INVALID +#define FIT_HR_ZONE_CALC_CUSTOM ((FIT_HR_ZONE_CALC)0) +#define FIT_HR_ZONE_CALC_PERCENT_MAX_HR ((FIT_HR_ZONE_CALC)1) +#define FIT_HR_ZONE_CALC_PERCENT_HRR ((FIT_HR_ZONE_CALC)2) +#define FIT_HR_ZONE_CALC_COUNT 3 + +typedef FIT_ENUM FIT_PWR_ZONE_CALC; +#define FIT_PWR_ZONE_CALC_INVALID FIT_ENUM_INVALID +#define FIT_PWR_ZONE_CALC_CUSTOM ((FIT_PWR_ZONE_CALC)0) +#define FIT_PWR_ZONE_CALC_PERCENT_FTP ((FIT_PWR_ZONE_CALC)1) +#define FIT_PWR_ZONE_CALC_COUNT 2 + +typedef FIT_ENUM FIT_WKT_STEP_DURATION; +#define FIT_WKT_STEP_DURATION_INVALID FIT_ENUM_INVALID +#define FIT_WKT_STEP_DURATION_TIME ((FIT_WKT_STEP_DURATION)0) +#define FIT_WKT_STEP_DURATION_DISTANCE ((FIT_WKT_STEP_DURATION)1) +#define FIT_WKT_STEP_DURATION_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)2) +#define FIT_WKT_STEP_DURATION_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)3) +#define FIT_WKT_STEP_DURATION_CALORIES ((FIT_WKT_STEP_DURATION)4) +#define FIT_WKT_STEP_DURATION_OPEN ((FIT_WKT_STEP_DURATION)5) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_STEPS_CMPLT ((FIT_WKT_STEP_DURATION)6) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_TIME ((FIT_WKT_STEP_DURATION)7) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_DISTANCE ((FIT_WKT_STEP_DURATION)8) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_CALORIES ((FIT_WKT_STEP_DURATION)9) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)10) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)11) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)12) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)13) +#define FIT_WKT_STEP_DURATION_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)14) +#define FIT_WKT_STEP_DURATION_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)15) +#define FIT_WKT_STEP_DURATION_TRAINING_PEAKS_TSS ((FIT_WKT_STEP_DURATION)16) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_LAST_LAP_LESS_THAN ((FIT_WKT_STEP_DURATION)17) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_MAX_POWER_LAST_LAP_LESS_THAN ((FIT_WKT_STEP_DURATION)18) +#define FIT_WKT_STEP_DURATION_POWER_3S_LESS_THAN ((FIT_WKT_STEP_DURATION)19) +#define FIT_WKT_STEP_DURATION_POWER_10S_LESS_THAN ((FIT_WKT_STEP_DURATION)20) +#define FIT_WKT_STEP_DURATION_POWER_30S_LESS_THAN ((FIT_WKT_STEP_DURATION)21) +#define FIT_WKT_STEP_DURATION_POWER_3S_GREATER_THAN ((FIT_WKT_STEP_DURATION)22) +#define FIT_WKT_STEP_DURATION_POWER_10S_GREATER_THAN ((FIT_WKT_STEP_DURATION)23) +#define FIT_WKT_STEP_DURATION_POWER_30S_GREATER_THAN ((FIT_WKT_STEP_DURATION)24) +#define FIT_WKT_STEP_DURATION_POWER_LAP_LESS_THAN ((FIT_WKT_STEP_DURATION)25) +#define FIT_WKT_STEP_DURATION_POWER_LAP_GREATER_THAN ((FIT_WKT_STEP_DURATION)26) +#define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_TRAINING_PEAKS_TSS ((FIT_WKT_STEP_DURATION)27) +#define FIT_WKT_STEP_DURATION_REPETITION_TIME ((FIT_WKT_STEP_DURATION)28) +#define FIT_WKT_STEP_DURATION_REPS ((FIT_WKT_STEP_DURATION)29) +#define FIT_WKT_STEP_DURATION_TIME_ONLY ((FIT_WKT_STEP_DURATION)31) +#define FIT_WKT_STEP_DURATION_COUNT 31 + +typedef FIT_ENUM FIT_WKT_STEP_TARGET; +#define FIT_WKT_STEP_TARGET_INVALID FIT_ENUM_INVALID +#define FIT_WKT_STEP_TARGET_SPEED ((FIT_WKT_STEP_TARGET)0) +#define FIT_WKT_STEP_TARGET_HEART_RATE ((FIT_WKT_STEP_TARGET)1) +#define FIT_WKT_STEP_TARGET_OPEN ((FIT_WKT_STEP_TARGET)2) +#define FIT_WKT_STEP_TARGET_CADENCE ((FIT_WKT_STEP_TARGET)3) +#define FIT_WKT_STEP_TARGET_POWER ((FIT_WKT_STEP_TARGET)4) +#define FIT_WKT_STEP_TARGET_GRADE ((FIT_WKT_STEP_TARGET)5) +#define FIT_WKT_STEP_TARGET_RESISTANCE ((FIT_WKT_STEP_TARGET)6) +#define FIT_WKT_STEP_TARGET_POWER_3S ((FIT_WKT_STEP_TARGET)7) +#define FIT_WKT_STEP_TARGET_POWER_10S ((FIT_WKT_STEP_TARGET)8) +#define FIT_WKT_STEP_TARGET_POWER_30S ((FIT_WKT_STEP_TARGET)9) +#define FIT_WKT_STEP_TARGET_POWER_LAP ((FIT_WKT_STEP_TARGET)10) +#define FIT_WKT_STEP_TARGET_SWIM_STROKE ((FIT_WKT_STEP_TARGET)11) +#define FIT_WKT_STEP_TARGET_SPEED_LAP ((FIT_WKT_STEP_TARGET)12) +#define FIT_WKT_STEP_TARGET_HEART_RATE_LAP ((FIT_WKT_STEP_TARGET)13) +#define FIT_WKT_STEP_TARGET_COUNT 14 + +typedef FIT_ENUM FIT_GOAL; +#define FIT_GOAL_INVALID FIT_ENUM_INVALID +#define FIT_GOAL_TIME ((FIT_GOAL)0) +#define FIT_GOAL_DISTANCE ((FIT_GOAL)1) +#define FIT_GOAL_CALORIES ((FIT_GOAL)2) +#define FIT_GOAL_FREQUENCY ((FIT_GOAL)3) +#define FIT_GOAL_STEPS ((FIT_GOAL)4) +#define FIT_GOAL_ASCENT ((FIT_GOAL)5) +#define FIT_GOAL_ACTIVE_MINUTES ((FIT_GOAL)6) +#define FIT_GOAL_COUNT 7 + +typedef FIT_ENUM FIT_GOAL_RECURRENCE; +#define FIT_GOAL_RECURRENCE_INVALID FIT_ENUM_INVALID +#define FIT_GOAL_RECURRENCE_OFF ((FIT_GOAL_RECURRENCE)0) +#define FIT_GOAL_RECURRENCE_DAILY ((FIT_GOAL_RECURRENCE)1) +#define FIT_GOAL_RECURRENCE_WEEKLY ((FIT_GOAL_RECURRENCE)2) +#define FIT_GOAL_RECURRENCE_MONTHLY ((FIT_GOAL_RECURRENCE)3) +#define FIT_GOAL_RECURRENCE_YEARLY ((FIT_GOAL_RECURRENCE)4) +#define FIT_GOAL_RECURRENCE_CUSTOM ((FIT_GOAL_RECURRENCE)5) +#define FIT_GOAL_RECURRENCE_COUNT 6 + +typedef FIT_ENUM FIT_GOAL_SOURCE; +#define FIT_GOAL_SOURCE_INVALID FIT_ENUM_INVALID +#define FIT_GOAL_SOURCE_AUTO ((FIT_GOAL_SOURCE)0) // Device generated +#define FIT_GOAL_SOURCE_COMMUNITY ((FIT_GOAL_SOURCE)1) // Social network sourced goal +#define FIT_GOAL_SOURCE_USER ((FIT_GOAL_SOURCE)2) // Manually generated +#define FIT_GOAL_SOURCE_COUNT 3 + +typedef FIT_ENUM FIT_SCHEDULE; +#define FIT_SCHEDULE_INVALID FIT_ENUM_INVALID +#define FIT_SCHEDULE_WORKOUT ((FIT_SCHEDULE)0) +#define FIT_SCHEDULE_COURSE ((FIT_SCHEDULE)1) +#define FIT_SCHEDULE_COUNT 2 + +typedef FIT_ENUM FIT_COURSE_POINT; +#define FIT_COURSE_POINT_INVALID FIT_ENUM_INVALID +#define FIT_COURSE_POINT_GENERIC ((FIT_COURSE_POINT)0) +#define FIT_COURSE_POINT_SUMMIT ((FIT_COURSE_POINT)1) +#define FIT_COURSE_POINT_VALLEY ((FIT_COURSE_POINT)2) +#define FIT_COURSE_POINT_WATER ((FIT_COURSE_POINT)3) +#define FIT_COURSE_POINT_FOOD ((FIT_COURSE_POINT)4) +#define FIT_COURSE_POINT_DANGER ((FIT_COURSE_POINT)5) +#define FIT_COURSE_POINT_LEFT ((FIT_COURSE_POINT)6) +#define FIT_COURSE_POINT_RIGHT ((FIT_COURSE_POINT)7) +#define FIT_COURSE_POINT_STRAIGHT ((FIT_COURSE_POINT)8) +#define FIT_COURSE_POINT_FIRST_AID ((FIT_COURSE_POINT)9) +#define FIT_COURSE_POINT_FOURTH_CATEGORY ((FIT_COURSE_POINT)10) +#define FIT_COURSE_POINT_THIRD_CATEGORY ((FIT_COURSE_POINT)11) +#define FIT_COURSE_POINT_SECOND_CATEGORY ((FIT_COURSE_POINT)12) +#define FIT_COURSE_POINT_FIRST_CATEGORY ((FIT_COURSE_POINT)13) +#define FIT_COURSE_POINT_HORS_CATEGORY ((FIT_COURSE_POINT)14) +#define FIT_COURSE_POINT_SPRINT ((FIT_COURSE_POINT)15) +#define FIT_COURSE_POINT_LEFT_FORK ((FIT_COURSE_POINT)16) +#define FIT_COURSE_POINT_RIGHT_FORK ((FIT_COURSE_POINT)17) +#define FIT_COURSE_POINT_MIDDLE_FORK ((FIT_COURSE_POINT)18) +#define FIT_COURSE_POINT_SLIGHT_LEFT ((FIT_COURSE_POINT)19) +#define FIT_COURSE_POINT_SHARP_LEFT ((FIT_COURSE_POINT)20) +#define FIT_COURSE_POINT_SLIGHT_RIGHT ((FIT_COURSE_POINT)21) +#define FIT_COURSE_POINT_SHARP_RIGHT ((FIT_COURSE_POINT)22) +#define FIT_COURSE_POINT_U_TURN ((FIT_COURSE_POINT)23) +#define FIT_COURSE_POINT_SEGMENT_START ((FIT_COURSE_POINT)24) +#define FIT_COURSE_POINT_SEGMENT_END ((FIT_COURSE_POINT)25) +#define FIT_COURSE_POINT_CAMPSITE ((FIT_COURSE_POINT)27) +#define FIT_COURSE_POINT_AID_STATION ((FIT_COURSE_POINT)28) +#define FIT_COURSE_POINT_REST_AREA ((FIT_COURSE_POINT)29) +#define FIT_COURSE_POINT_GENERAL_DISTANCE ((FIT_COURSE_POINT)30) // Used with UpAhead +#define FIT_COURSE_POINT_SERVICE ((FIT_COURSE_POINT)31) +#define FIT_COURSE_POINT_ENERGY_GEL ((FIT_COURSE_POINT)32) +#define FIT_COURSE_POINT_SPORTS_DRINK ((FIT_COURSE_POINT)33) +#define FIT_COURSE_POINT_MILE_MARKER ((FIT_COURSE_POINT)34) +#define FIT_COURSE_POINT_CHECKPOINT ((FIT_COURSE_POINT)35) +#define FIT_COURSE_POINT_SHELTER ((FIT_COURSE_POINT)36) +#define FIT_COURSE_POINT_MEETING_SPOT ((FIT_COURSE_POINT)37) +#define FIT_COURSE_POINT_OVERLOOK ((FIT_COURSE_POINT)38) +#define FIT_COURSE_POINT_TOILET ((FIT_COURSE_POINT)39) +#define FIT_COURSE_POINT_SHOWER ((FIT_COURSE_POINT)40) +#define FIT_COURSE_POINT_GEAR ((FIT_COURSE_POINT)41) +#define FIT_COURSE_POINT_SHARP_CURVE ((FIT_COURSE_POINT)42) +#define FIT_COURSE_POINT_STEEP_INCLINE ((FIT_COURSE_POINT)43) +#define FIT_COURSE_POINT_TUNNEL ((FIT_COURSE_POINT)44) +#define FIT_COURSE_POINT_BRIDGE ((FIT_COURSE_POINT)45) +#define FIT_COURSE_POINT_OBSTACLE ((FIT_COURSE_POINT)46) +#define FIT_COURSE_POINT_CROSSING ((FIT_COURSE_POINT)47) +#define FIT_COURSE_POINT_STORE ((FIT_COURSE_POINT)48) +#define FIT_COURSE_POINT_TRANSITION ((FIT_COURSE_POINT)49) +#define FIT_COURSE_POINT_NAVAID ((FIT_COURSE_POINT)50) +#define FIT_COURSE_POINT_TRANSPORT ((FIT_COURSE_POINT)51) +#define FIT_COURSE_POINT_ALERT ((FIT_COURSE_POINT)52) +#define FIT_COURSE_POINT_INFO ((FIT_COURSE_POINT)53) +#define FIT_COURSE_POINT_COUNT 53 + +typedef FIT_UINT16 FIT_MANUFACTURER; +#define FIT_MANUFACTURER_INVALID FIT_UINT16_INVALID +#define FIT_MANUFACTURER_GARMIN ((FIT_MANUFACTURER)1) +#define FIT_MANUFACTURER_GARMIN_FR405_ANTFS ((FIT_MANUFACTURER)2) // Do not use. Used by FR405 for ANTFS man id. +#define FIT_MANUFACTURER_ZEPHYR ((FIT_MANUFACTURER)3) +#define FIT_MANUFACTURER_DAYTON ((FIT_MANUFACTURER)4) +#define FIT_MANUFACTURER_IDT ((FIT_MANUFACTURER)5) +#define FIT_MANUFACTURER_SRM ((FIT_MANUFACTURER)6) +#define FIT_MANUFACTURER_QUARQ ((FIT_MANUFACTURER)7) +#define FIT_MANUFACTURER_IBIKE ((FIT_MANUFACTURER)8) +#define FIT_MANUFACTURER_SARIS ((FIT_MANUFACTURER)9) +#define FIT_MANUFACTURER_SPARK_HK ((FIT_MANUFACTURER)10) +#define FIT_MANUFACTURER_TANITA ((FIT_MANUFACTURER)11) +#define FIT_MANUFACTURER_ECHOWELL ((FIT_MANUFACTURER)12) +#define FIT_MANUFACTURER_DYNASTREAM_OEM ((FIT_MANUFACTURER)13) +#define FIT_MANUFACTURER_NAUTILUS ((FIT_MANUFACTURER)14) +#define FIT_MANUFACTURER_DYNASTREAM ((FIT_MANUFACTURER)15) +#define FIT_MANUFACTURER_TIMEX ((FIT_MANUFACTURER)16) +#define FIT_MANUFACTURER_METRIGEAR ((FIT_MANUFACTURER)17) +#define FIT_MANUFACTURER_XELIC ((FIT_MANUFACTURER)18) +#define FIT_MANUFACTURER_BEURER ((FIT_MANUFACTURER)19) +#define FIT_MANUFACTURER_CARDIOSPORT ((FIT_MANUFACTURER)20) +#define FIT_MANUFACTURER_A_AND_D ((FIT_MANUFACTURER)21) +#define FIT_MANUFACTURER_HMM ((FIT_MANUFACTURER)22) +#define FIT_MANUFACTURER_SUUNTO ((FIT_MANUFACTURER)23) +#define FIT_MANUFACTURER_THITA_ELEKTRONIK ((FIT_MANUFACTURER)24) +#define FIT_MANUFACTURER_GPULSE ((FIT_MANUFACTURER)25) +#define FIT_MANUFACTURER_CLEAN_MOBILE ((FIT_MANUFACTURER)26) +#define FIT_MANUFACTURER_PEDAL_BRAIN ((FIT_MANUFACTURER)27) +#define FIT_MANUFACTURER_PEAKSWARE ((FIT_MANUFACTURER)28) +#define FIT_MANUFACTURER_SAXONAR ((FIT_MANUFACTURER)29) +#define FIT_MANUFACTURER_LEMOND_FITNESS ((FIT_MANUFACTURER)30) +#define FIT_MANUFACTURER_DEXCOM ((FIT_MANUFACTURER)31) +#define FIT_MANUFACTURER_WAHOO_FITNESS ((FIT_MANUFACTURER)32) +#define FIT_MANUFACTURER_OCTANE_FITNESS ((FIT_MANUFACTURER)33) +#define FIT_MANUFACTURER_ARCHINOETICS ((FIT_MANUFACTURER)34) +#define FIT_MANUFACTURER_THE_HURT_BOX ((FIT_MANUFACTURER)35) +#define FIT_MANUFACTURER_CITIZEN_SYSTEMS ((FIT_MANUFACTURER)36) +#define FIT_MANUFACTURER_MAGELLAN ((FIT_MANUFACTURER)37) +#define FIT_MANUFACTURER_OSYNCE ((FIT_MANUFACTURER)38) +#define FIT_MANUFACTURER_HOLUX ((FIT_MANUFACTURER)39) +#define FIT_MANUFACTURER_CONCEPT2 ((FIT_MANUFACTURER)40) +#define FIT_MANUFACTURER_SHIMANO ((FIT_MANUFACTURER)41) +#define FIT_MANUFACTURER_ONE_GIANT_LEAP ((FIT_MANUFACTURER)42) +#define FIT_MANUFACTURER_ACE_SENSOR ((FIT_MANUFACTURER)43) +#define FIT_MANUFACTURER_BRIM_BROTHERS ((FIT_MANUFACTURER)44) +#define FIT_MANUFACTURER_XPLOVA ((FIT_MANUFACTURER)45) +#define FIT_MANUFACTURER_PERCEPTION_DIGITAL ((FIT_MANUFACTURER)46) +#define FIT_MANUFACTURER_BF1SYSTEMS ((FIT_MANUFACTURER)47) +#define FIT_MANUFACTURER_PIONEER ((FIT_MANUFACTURER)48) +#define FIT_MANUFACTURER_SPANTEC ((FIT_MANUFACTURER)49) +#define FIT_MANUFACTURER_METALOGICS ((FIT_MANUFACTURER)50) +#define FIT_MANUFACTURER_4IIIIS ((FIT_MANUFACTURER)51) +#define FIT_MANUFACTURER_SEIKO_EPSON ((FIT_MANUFACTURER)52) +#define FIT_MANUFACTURER_SEIKO_EPSON_OEM ((FIT_MANUFACTURER)53) +#define FIT_MANUFACTURER_IFOR_POWELL ((FIT_MANUFACTURER)54) +#define FIT_MANUFACTURER_MAXWELL_GUIDER ((FIT_MANUFACTURER)55) +#define FIT_MANUFACTURER_STAR_TRAC ((FIT_MANUFACTURER)56) +#define FIT_MANUFACTURER_BREAKAWAY ((FIT_MANUFACTURER)57) +#define FIT_MANUFACTURER_ALATECH_TECHNOLOGY_LTD ((FIT_MANUFACTURER)58) +#define FIT_MANUFACTURER_MIO_TECHNOLOGY_EUROPE ((FIT_MANUFACTURER)59) +#define FIT_MANUFACTURER_ROTOR ((FIT_MANUFACTURER)60) +#define FIT_MANUFACTURER_GEONAUTE ((FIT_MANUFACTURER)61) +#define FIT_MANUFACTURER_ID_BIKE ((FIT_MANUFACTURER)62) +#define FIT_MANUFACTURER_SPECIALIZED ((FIT_MANUFACTURER)63) +#define FIT_MANUFACTURER_WTEK ((FIT_MANUFACTURER)64) +#define FIT_MANUFACTURER_PHYSICAL_ENTERPRISES ((FIT_MANUFACTURER)65) +#define FIT_MANUFACTURER_NORTH_POLE_ENGINEERING ((FIT_MANUFACTURER)66) +#define FIT_MANUFACTURER_BKOOL ((FIT_MANUFACTURER)67) +#define FIT_MANUFACTURER_CATEYE ((FIT_MANUFACTURER)68) +#define FIT_MANUFACTURER_STAGES_CYCLING ((FIT_MANUFACTURER)69) +#define FIT_MANUFACTURER_SIGMASPORT ((FIT_MANUFACTURER)70) +#define FIT_MANUFACTURER_TOMTOM ((FIT_MANUFACTURER)71) +#define FIT_MANUFACTURER_PERIPEDAL ((FIT_MANUFACTURER)72) +#define FIT_MANUFACTURER_WATTBIKE ((FIT_MANUFACTURER)73) +#define FIT_MANUFACTURER_MOXY ((FIT_MANUFACTURER)76) +#define FIT_MANUFACTURER_CICLOSPORT ((FIT_MANUFACTURER)77) +#define FIT_MANUFACTURER_POWERBAHN ((FIT_MANUFACTURER)78) +#define FIT_MANUFACTURER_ACORN_PROJECTS_APS ((FIT_MANUFACTURER)79) +#define FIT_MANUFACTURER_LIFEBEAM ((FIT_MANUFACTURER)80) +#define FIT_MANUFACTURER_BONTRAGER ((FIT_MANUFACTURER)81) +#define FIT_MANUFACTURER_WELLGO ((FIT_MANUFACTURER)82) +#define FIT_MANUFACTURER_SCOSCHE ((FIT_MANUFACTURER)83) +#define FIT_MANUFACTURER_MAGURA ((FIT_MANUFACTURER)84) +#define FIT_MANUFACTURER_WOODWAY ((FIT_MANUFACTURER)85) +#define FIT_MANUFACTURER_ELITE ((FIT_MANUFACTURER)86) +#define FIT_MANUFACTURER_NIELSEN_KELLERMAN ((FIT_MANUFACTURER)87) +#define FIT_MANUFACTURER_DK_CITY ((FIT_MANUFACTURER)88) +#define FIT_MANUFACTURER_TACX ((FIT_MANUFACTURER)89) +#define FIT_MANUFACTURER_DIRECTION_TECHNOLOGY ((FIT_MANUFACTURER)90) +#define FIT_MANUFACTURER_MAGTONIC ((FIT_MANUFACTURER)91) +#define FIT_MANUFACTURER_1PARTCARBON ((FIT_MANUFACTURER)92) +#define FIT_MANUFACTURER_INSIDE_RIDE_TECHNOLOGIES ((FIT_MANUFACTURER)93) +#define FIT_MANUFACTURER_SOUND_OF_MOTION ((FIT_MANUFACTURER)94) +#define FIT_MANUFACTURER_STRYD ((FIT_MANUFACTURER)95) +#define FIT_MANUFACTURER_ICG ((FIT_MANUFACTURER)96) // Indoorcycling Group +#define FIT_MANUFACTURER_MIPULSE ((FIT_MANUFACTURER)97) +#define FIT_MANUFACTURER_BSX_ATHLETICS ((FIT_MANUFACTURER)98) +#define FIT_MANUFACTURER_LOOK ((FIT_MANUFACTURER)99) +#define FIT_MANUFACTURER_CAMPAGNOLO_SRL ((FIT_MANUFACTURER)100) +#define FIT_MANUFACTURER_BODY_BIKE_SMART ((FIT_MANUFACTURER)101) +#define FIT_MANUFACTURER_PRAXISWORKS ((FIT_MANUFACTURER)102) +#define FIT_MANUFACTURER_LIMITS_TECHNOLOGY ((FIT_MANUFACTURER)103) // Limits Technology Ltd. +#define FIT_MANUFACTURER_TOPACTION_TECHNOLOGY ((FIT_MANUFACTURER)104) // TopAction Technology Inc. +#define FIT_MANUFACTURER_COSINUSS ((FIT_MANUFACTURER)105) +#define FIT_MANUFACTURER_FITCARE ((FIT_MANUFACTURER)106) +#define FIT_MANUFACTURER_MAGENE ((FIT_MANUFACTURER)107) +#define FIT_MANUFACTURER_GIANT_MANUFACTURING_CO ((FIT_MANUFACTURER)108) +#define FIT_MANUFACTURER_TIGRASPORT ((FIT_MANUFACTURER)109) // Tigrasport +#define FIT_MANUFACTURER_SALUTRON ((FIT_MANUFACTURER)110) +#define FIT_MANUFACTURER_TECHNOGYM ((FIT_MANUFACTURER)111) +#define FIT_MANUFACTURER_BRYTON_SENSORS ((FIT_MANUFACTURER)112) +#define FIT_MANUFACTURER_LATITUDE_LIMITED ((FIT_MANUFACTURER)113) +#define FIT_MANUFACTURER_SOARING_TECHNOLOGY ((FIT_MANUFACTURER)114) +#define FIT_MANUFACTURER_IGPSPORT ((FIT_MANUFACTURER)115) +#define FIT_MANUFACTURER_THINKRIDER ((FIT_MANUFACTURER)116) +#define FIT_MANUFACTURER_GOPHER_SPORT ((FIT_MANUFACTURER)117) +#define FIT_MANUFACTURER_WATERROWER ((FIT_MANUFACTURER)118) +#define FIT_MANUFACTURER_ORANGETHEORY ((FIT_MANUFACTURER)119) +#define FIT_MANUFACTURER_INPEAK ((FIT_MANUFACTURER)120) +#define FIT_MANUFACTURER_KINETIC ((FIT_MANUFACTURER)121) +#define FIT_MANUFACTURER_JOHNSON_HEALTH_TECH ((FIT_MANUFACTURER)122) +#define FIT_MANUFACTURER_POLAR_ELECTRO ((FIT_MANUFACTURER)123) +#define FIT_MANUFACTURER_SEESENSE ((FIT_MANUFACTURER)124) +#define FIT_MANUFACTURER_NCI_TECHNOLOGY ((FIT_MANUFACTURER)125) +#define FIT_MANUFACTURER_IQSQUARE ((FIT_MANUFACTURER)126) +#define FIT_MANUFACTURER_LEOMO ((FIT_MANUFACTURER)127) +#define FIT_MANUFACTURER_IFIT_COM ((FIT_MANUFACTURER)128) +#define FIT_MANUFACTURER_COROS_BYTE ((FIT_MANUFACTURER)129) +#define FIT_MANUFACTURER_VERSA_DESIGN ((FIT_MANUFACTURER)130) +#define FIT_MANUFACTURER_CHILEAF ((FIT_MANUFACTURER)131) +#define FIT_MANUFACTURER_CYCPLUS ((FIT_MANUFACTURER)132) +#define FIT_MANUFACTURER_GRAVAA_BYTE ((FIT_MANUFACTURER)133) +#define FIT_MANUFACTURER_SIGEYI ((FIT_MANUFACTURER)134) +#define FIT_MANUFACTURER_COOSPO ((FIT_MANUFACTURER)135) +#define FIT_MANUFACTURER_GEOID ((FIT_MANUFACTURER)136) +#define FIT_MANUFACTURER_BOSCH ((FIT_MANUFACTURER)137) +#define FIT_MANUFACTURER_KYTO ((FIT_MANUFACTURER)138) +#define FIT_MANUFACTURER_KINETIC_SPORTS ((FIT_MANUFACTURER)139) +#define FIT_MANUFACTURER_DECATHLON_BYTE ((FIT_MANUFACTURER)140) +#define FIT_MANUFACTURER_TQ_SYSTEMS ((FIT_MANUFACTURER)141) +#define FIT_MANUFACTURER_TAG_HEUER ((FIT_MANUFACTURER)142) +#define FIT_MANUFACTURER_KEISER_FITNESS ((FIT_MANUFACTURER)143) +#define FIT_MANUFACTURER_ZWIFT_BYTE ((FIT_MANUFACTURER)144) +#define FIT_MANUFACTURER_DEVELOPMENT ((FIT_MANUFACTURER)255) +#define FIT_MANUFACTURER_HEALTHANDLIFE ((FIT_MANUFACTURER)257) +#define FIT_MANUFACTURER_LEZYNE ((FIT_MANUFACTURER)258) +#define FIT_MANUFACTURER_SCRIBE_LABS ((FIT_MANUFACTURER)259) +#define FIT_MANUFACTURER_ZWIFT ((FIT_MANUFACTURER)260) +#define FIT_MANUFACTURER_WATTEAM ((FIT_MANUFACTURER)261) +#define FIT_MANUFACTURER_RECON ((FIT_MANUFACTURER)262) +#define FIT_MANUFACTURER_FAVERO_ELECTRONICS ((FIT_MANUFACTURER)263) +#define FIT_MANUFACTURER_DYNOVELO ((FIT_MANUFACTURER)264) +#define FIT_MANUFACTURER_STRAVA ((FIT_MANUFACTURER)265) +#define FIT_MANUFACTURER_PRECOR ((FIT_MANUFACTURER)266) // Amer Sports +#define FIT_MANUFACTURER_BRYTON ((FIT_MANUFACTURER)267) +#define FIT_MANUFACTURER_SRAM ((FIT_MANUFACTURER)268) +#define FIT_MANUFACTURER_NAVMAN ((FIT_MANUFACTURER)269) // MiTAC Global Corporation (Mio Technology) +#define FIT_MANUFACTURER_COBI ((FIT_MANUFACTURER)270) // COBI GmbH +#define FIT_MANUFACTURER_SPIVI ((FIT_MANUFACTURER)271) +#define FIT_MANUFACTURER_MIO_MAGELLAN ((FIT_MANUFACTURER)272) +#define FIT_MANUFACTURER_EVESPORTS ((FIT_MANUFACTURER)273) +#define FIT_MANUFACTURER_SENSITIVUS_GAUGE ((FIT_MANUFACTURER)274) +#define FIT_MANUFACTURER_PODOON ((FIT_MANUFACTURER)275) +#define FIT_MANUFACTURER_LIFE_TIME_FITNESS ((FIT_MANUFACTURER)276) +#define FIT_MANUFACTURER_FALCO_E_MOTORS ((FIT_MANUFACTURER)277) // Falco eMotors Inc. +#define FIT_MANUFACTURER_MINOURA ((FIT_MANUFACTURER)278) +#define FIT_MANUFACTURER_CYCLIQ ((FIT_MANUFACTURER)279) +#define FIT_MANUFACTURER_LUXOTTICA ((FIT_MANUFACTURER)280) +#define FIT_MANUFACTURER_TRAINER_ROAD ((FIT_MANUFACTURER)281) +#define FIT_MANUFACTURER_THE_SUFFERFEST ((FIT_MANUFACTURER)282) +#define FIT_MANUFACTURER_FULLSPEEDAHEAD ((FIT_MANUFACTURER)283) +#define FIT_MANUFACTURER_VIRTUALTRAINING ((FIT_MANUFACTURER)284) +#define FIT_MANUFACTURER_FEEDBACKSPORTS ((FIT_MANUFACTURER)285) +#define FIT_MANUFACTURER_OMATA ((FIT_MANUFACTURER)286) +#define FIT_MANUFACTURER_VDO ((FIT_MANUFACTURER)287) +#define FIT_MANUFACTURER_MAGNETICDAYS ((FIT_MANUFACTURER)288) +#define FIT_MANUFACTURER_HAMMERHEAD ((FIT_MANUFACTURER)289) +#define FIT_MANUFACTURER_KINETIC_BY_KURT ((FIT_MANUFACTURER)290) +#define FIT_MANUFACTURER_SHAPELOG ((FIT_MANUFACTURER)291) +#define FIT_MANUFACTURER_DABUZIDUO ((FIT_MANUFACTURER)292) +#define FIT_MANUFACTURER_JETBLACK ((FIT_MANUFACTURER)293) +#define FIT_MANUFACTURER_COROS ((FIT_MANUFACTURER)294) +#define FIT_MANUFACTURER_VIRTUGO ((FIT_MANUFACTURER)295) +#define FIT_MANUFACTURER_VELOSENSE ((FIT_MANUFACTURER)296) +#define FIT_MANUFACTURER_CYCLIGENTINC ((FIT_MANUFACTURER)297) +#define FIT_MANUFACTURER_TRAILFORKS ((FIT_MANUFACTURER)298) +#define FIT_MANUFACTURER_MAHLE_EBIKEMOTION ((FIT_MANUFACTURER)299) +#define FIT_MANUFACTURER_NURVV ((FIT_MANUFACTURER)300) +#define FIT_MANUFACTURER_MICROPROGRAM ((FIT_MANUFACTURER)301) +#define FIT_MANUFACTURER_ZONE5CLOUD ((FIT_MANUFACTURER)302) +#define FIT_MANUFACTURER_GREENTEG ((FIT_MANUFACTURER)303) +#define FIT_MANUFACTURER_YAMAHA_MOTORS ((FIT_MANUFACTURER)304) +#define FIT_MANUFACTURER_WHOOP ((FIT_MANUFACTURER)305) +#define FIT_MANUFACTURER_GRAVAA ((FIT_MANUFACTURER)306) +#define FIT_MANUFACTURER_ONELAP ((FIT_MANUFACTURER)307) +#define FIT_MANUFACTURER_MONARK_EXERCISE ((FIT_MANUFACTURER)308) +#define FIT_MANUFACTURER_FORM ((FIT_MANUFACTURER)309) +#define FIT_MANUFACTURER_DECATHLON ((FIT_MANUFACTURER)310) +#define FIT_MANUFACTURER_SYNCROS ((FIT_MANUFACTURER)311) +#define FIT_MANUFACTURER_HEATUP ((FIT_MANUFACTURER)312) +#define FIT_MANUFACTURER_CANNONDALE ((FIT_MANUFACTURER)313) +#define FIT_MANUFACTURER_TRUE_FITNESS ((FIT_MANUFACTURER)314) +#define FIT_MANUFACTURER_RGT_CYCLING ((FIT_MANUFACTURER)315) +#define FIT_MANUFACTURER_VASA ((FIT_MANUFACTURER)316) +#define FIT_MANUFACTURER_RACE_REPUBLIC ((FIT_MANUFACTURER)317) +#define FIT_MANUFACTURER_FAZUA ((FIT_MANUFACTURER)318) +#define FIT_MANUFACTURER_OREKA_TRAINING ((FIT_MANUFACTURER)319) +#define FIT_MANUFACTURER_ISEC ((FIT_MANUFACTURER)320) // Lishun Electric & Communication +#define FIT_MANUFACTURER_LULULEMON_STUDIO ((FIT_MANUFACTURER)321) +#define FIT_MANUFACTURER_ACTIGRAPHCORP ((FIT_MANUFACTURER)5759) +#define FIT_MANUFACTURER_COUNT 209 + +typedef FIT_UINT16 FIT_GARMIN_PRODUCT; +#define FIT_GARMIN_PRODUCT_INVALID FIT_UINT16_INVALID +#define FIT_GARMIN_PRODUCT_HRM1 ((FIT_GARMIN_PRODUCT)1) +#define FIT_GARMIN_PRODUCT_AXH01 ((FIT_GARMIN_PRODUCT)2) // AXH01 HRM chipset +#define FIT_GARMIN_PRODUCT_AXB01 ((FIT_GARMIN_PRODUCT)3) +#define FIT_GARMIN_PRODUCT_AXB02 ((FIT_GARMIN_PRODUCT)4) +#define FIT_GARMIN_PRODUCT_HRM2SS ((FIT_GARMIN_PRODUCT)5) +#define FIT_GARMIN_PRODUCT_DSI_ALF02 ((FIT_GARMIN_PRODUCT)6) +#define FIT_GARMIN_PRODUCT_HRM3SS ((FIT_GARMIN_PRODUCT)7) +#define FIT_GARMIN_PRODUCT_HRM_RUN_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)8) // hrm_run model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_BSM ((FIT_GARMIN_PRODUCT)9) // BSM model for ANT+ messaging +#define FIT_GARMIN_PRODUCT_BCM ((FIT_GARMIN_PRODUCT)10) // BCM model for ANT+ messaging +#define FIT_GARMIN_PRODUCT_AXS01 ((FIT_GARMIN_PRODUCT)11) // AXS01 HRM Bike Chipset model for ANT+ messaging +#define FIT_GARMIN_PRODUCT_HRM_TRI_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)12) // hrm_tri model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_HRM4_RUN_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)13) // hrm4 run model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_FR225_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)14) // fr225 model for HRM ANT+ messaging +#define FIT_GARMIN_PRODUCT_GEN3_BSM_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)15) // gen3_bsm model for Bike Speed ANT+ messaging +#define FIT_GARMIN_PRODUCT_GEN3_BCM_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)16) // gen3_bcm model for Bike Cadence ANT+ messaging +#define FIT_GARMIN_PRODUCT_OHR ((FIT_GARMIN_PRODUCT)255) // Garmin Wearable Optical Heart Rate Sensor for ANT+ HR Profile Broadcasting +#define FIT_GARMIN_PRODUCT_FR301_CHINA ((FIT_GARMIN_PRODUCT)473) +#define FIT_GARMIN_PRODUCT_FR301_JAPAN ((FIT_GARMIN_PRODUCT)474) +#define FIT_GARMIN_PRODUCT_FR301_KOREA ((FIT_GARMIN_PRODUCT)475) +#define FIT_GARMIN_PRODUCT_FR301_TAIWAN ((FIT_GARMIN_PRODUCT)494) +#define FIT_GARMIN_PRODUCT_FR405 ((FIT_GARMIN_PRODUCT)717) // Forerunner 405 +#define FIT_GARMIN_PRODUCT_FR50 ((FIT_GARMIN_PRODUCT)782) // Forerunner 50 +#define FIT_GARMIN_PRODUCT_FR405_JAPAN ((FIT_GARMIN_PRODUCT)987) +#define FIT_GARMIN_PRODUCT_FR60 ((FIT_GARMIN_PRODUCT)988) // Forerunner 60 +#define FIT_GARMIN_PRODUCT_DSI_ALF01 ((FIT_GARMIN_PRODUCT)1011) +#define FIT_GARMIN_PRODUCT_FR310XT ((FIT_GARMIN_PRODUCT)1018) // Forerunner 310 +#define FIT_GARMIN_PRODUCT_EDGE500 ((FIT_GARMIN_PRODUCT)1036) +#define FIT_GARMIN_PRODUCT_FR110 ((FIT_GARMIN_PRODUCT)1124) // Forerunner 110 +#define FIT_GARMIN_PRODUCT_EDGE800 ((FIT_GARMIN_PRODUCT)1169) +#define FIT_GARMIN_PRODUCT_EDGE500_TAIWAN ((FIT_GARMIN_PRODUCT)1199) +#define FIT_GARMIN_PRODUCT_EDGE500_JAPAN ((FIT_GARMIN_PRODUCT)1213) +#define FIT_GARMIN_PRODUCT_CHIRP ((FIT_GARMIN_PRODUCT)1253) +#define FIT_GARMIN_PRODUCT_FR110_JAPAN ((FIT_GARMIN_PRODUCT)1274) +#define FIT_GARMIN_PRODUCT_EDGE200 ((FIT_GARMIN_PRODUCT)1325) +#define FIT_GARMIN_PRODUCT_FR910XT ((FIT_GARMIN_PRODUCT)1328) +#define FIT_GARMIN_PRODUCT_EDGE800_TAIWAN ((FIT_GARMIN_PRODUCT)1333) +#define FIT_GARMIN_PRODUCT_EDGE800_JAPAN ((FIT_GARMIN_PRODUCT)1334) +#define FIT_GARMIN_PRODUCT_ALF04 ((FIT_GARMIN_PRODUCT)1341) +#define FIT_GARMIN_PRODUCT_FR610 ((FIT_GARMIN_PRODUCT)1345) +#define FIT_GARMIN_PRODUCT_FR210_JAPAN ((FIT_GARMIN_PRODUCT)1360) +#define FIT_GARMIN_PRODUCT_VECTOR_SS ((FIT_GARMIN_PRODUCT)1380) +#define FIT_GARMIN_PRODUCT_VECTOR_CP ((FIT_GARMIN_PRODUCT)1381) +#define FIT_GARMIN_PRODUCT_EDGE800_CHINA ((FIT_GARMIN_PRODUCT)1386) +#define FIT_GARMIN_PRODUCT_EDGE500_CHINA ((FIT_GARMIN_PRODUCT)1387) +#define FIT_GARMIN_PRODUCT_APPROACH_G10 ((FIT_GARMIN_PRODUCT)1405) +#define FIT_GARMIN_PRODUCT_FR610_JAPAN ((FIT_GARMIN_PRODUCT)1410) +#define FIT_GARMIN_PRODUCT_EDGE500_KOREA ((FIT_GARMIN_PRODUCT)1422) +#define FIT_GARMIN_PRODUCT_FR70 ((FIT_GARMIN_PRODUCT)1436) +#define FIT_GARMIN_PRODUCT_FR310XT_4T ((FIT_GARMIN_PRODUCT)1446) +#define FIT_GARMIN_PRODUCT_AMX ((FIT_GARMIN_PRODUCT)1461) +#define FIT_GARMIN_PRODUCT_FR10 ((FIT_GARMIN_PRODUCT)1482) +#define FIT_GARMIN_PRODUCT_EDGE800_KOREA ((FIT_GARMIN_PRODUCT)1497) +#define FIT_GARMIN_PRODUCT_SWIM ((FIT_GARMIN_PRODUCT)1499) +#define FIT_GARMIN_PRODUCT_FR910XT_CHINA ((FIT_GARMIN_PRODUCT)1537) +#define FIT_GARMIN_PRODUCT_FENIX ((FIT_GARMIN_PRODUCT)1551) +#define FIT_GARMIN_PRODUCT_EDGE200_TAIWAN ((FIT_GARMIN_PRODUCT)1555) +#define FIT_GARMIN_PRODUCT_EDGE510 ((FIT_GARMIN_PRODUCT)1561) +#define FIT_GARMIN_PRODUCT_EDGE810 ((FIT_GARMIN_PRODUCT)1567) +#define FIT_GARMIN_PRODUCT_TEMPE ((FIT_GARMIN_PRODUCT)1570) +#define FIT_GARMIN_PRODUCT_FR910XT_JAPAN ((FIT_GARMIN_PRODUCT)1600) +#define FIT_GARMIN_PRODUCT_FR620 ((FIT_GARMIN_PRODUCT)1623) +#define FIT_GARMIN_PRODUCT_FR220 ((FIT_GARMIN_PRODUCT)1632) +#define FIT_GARMIN_PRODUCT_FR910XT_KOREA ((FIT_GARMIN_PRODUCT)1664) +#define FIT_GARMIN_PRODUCT_FR10_JAPAN ((FIT_GARMIN_PRODUCT)1688) +#define FIT_GARMIN_PRODUCT_EDGE810_JAPAN ((FIT_GARMIN_PRODUCT)1721) +#define FIT_GARMIN_PRODUCT_VIRB_ELITE ((FIT_GARMIN_PRODUCT)1735) +#define FIT_GARMIN_PRODUCT_EDGE_TOURING ((FIT_GARMIN_PRODUCT)1736) // Also Edge Touring Plus +#define FIT_GARMIN_PRODUCT_EDGE510_JAPAN ((FIT_GARMIN_PRODUCT)1742) +#define FIT_GARMIN_PRODUCT_HRM_TRI ((FIT_GARMIN_PRODUCT)1743) // Also HRM-Swim +#define FIT_GARMIN_PRODUCT_HRM_RUN ((FIT_GARMIN_PRODUCT)1752) +#define FIT_GARMIN_PRODUCT_FR920XT ((FIT_GARMIN_PRODUCT)1765) +#define FIT_GARMIN_PRODUCT_EDGE510_ASIA ((FIT_GARMIN_PRODUCT)1821) +#define FIT_GARMIN_PRODUCT_EDGE810_CHINA ((FIT_GARMIN_PRODUCT)1822) +#define FIT_GARMIN_PRODUCT_EDGE810_TAIWAN ((FIT_GARMIN_PRODUCT)1823) +#define FIT_GARMIN_PRODUCT_EDGE1000 ((FIT_GARMIN_PRODUCT)1836) +#define FIT_GARMIN_PRODUCT_VIVO_FIT ((FIT_GARMIN_PRODUCT)1837) +#define FIT_GARMIN_PRODUCT_VIRB_REMOTE ((FIT_GARMIN_PRODUCT)1853) +#define FIT_GARMIN_PRODUCT_VIVO_KI ((FIT_GARMIN_PRODUCT)1885) +#define FIT_GARMIN_PRODUCT_FR15 ((FIT_GARMIN_PRODUCT)1903) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE ((FIT_GARMIN_PRODUCT)1907) +#define FIT_GARMIN_PRODUCT_EDGE510_KOREA ((FIT_GARMIN_PRODUCT)1918) +#define FIT_GARMIN_PRODUCT_FR620_JAPAN ((FIT_GARMIN_PRODUCT)1928) +#define FIT_GARMIN_PRODUCT_FR620_CHINA ((FIT_GARMIN_PRODUCT)1929) +#define FIT_GARMIN_PRODUCT_FR220_JAPAN ((FIT_GARMIN_PRODUCT)1930) +#define FIT_GARMIN_PRODUCT_FR220_CHINA ((FIT_GARMIN_PRODUCT)1931) +#define FIT_GARMIN_PRODUCT_APPROACH_S6 ((FIT_GARMIN_PRODUCT)1936) +#define FIT_GARMIN_PRODUCT_VIVO_SMART ((FIT_GARMIN_PRODUCT)1956) +#define FIT_GARMIN_PRODUCT_FENIX2 ((FIT_GARMIN_PRODUCT)1967) +#define FIT_GARMIN_PRODUCT_EPIX ((FIT_GARMIN_PRODUCT)1988) +#define FIT_GARMIN_PRODUCT_FENIX3 ((FIT_GARMIN_PRODUCT)2050) +#define FIT_GARMIN_PRODUCT_EDGE1000_TAIWAN ((FIT_GARMIN_PRODUCT)2052) +#define FIT_GARMIN_PRODUCT_EDGE1000_JAPAN ((FIT_GARMIN_PRODUCT)2053) +#define FIT_GARMIN_PRODUCT_FR15_JAPAN ((FIT_GARMIN_PRODUCT)2061) +#define FIT_GARMIN_PRODUCT_EDGE520 ((FIT_GARMIN_PRODUCT)2067) +#define FIT_GARMIN_PRODUCT_EDGE1000_CHINA ((FIT_GARMIN_PRODUCT)2070) +#define FIT_GARMIN_PRODUCT_FR620_RUSSIA ((FIT_GARMIN_PRODUCT)2072) +#define FIT_GARMIN_PRODUCT_FR220_RUSSIA ((FIT_GARMIN_PRODUCT)2073) +#define FIT_GARMIN_PRODUCT_VECTOR_S ((FIT_GARMIN_PRODUCT)2079) +#define FIT_GARMIN_PRODUCT_EDGE1000_KOREA ((FIT_GARMIN_PRODUCT)2100) +#define FIT_GARMIN_PRODUCT_FR920XT_TAIWAN ((FIT_GARMIN_PRODUCT)2130) +#define FIT_GARMIN_PRODUCT_FR920XT_CHINA ((FIT_GARMIN_PRODUCT)2131) +#define FIT_GARMIN_PRODUCT_FR920XT_JAPAN ((FIT_GARMIN_PRODUCT)2132) +#define FIT_GARMIN_PRODUCT_VIRBX ((FIT_GARMIN_PRODUCT)2134) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_APAC ((FIT_GARMIN_PRODUCT)2135) +#define FIT_GARMIN_PRODUCT_ETREX_TOUCH ((FIT_GARMIN_PRODUCT)2140) +#define FIT_GARMIN_PRODUCT_EDGE25 ((FIT_GARMIN_PRODUCT)2147) +#define FIT_GARMIN_PRODUCT_FR25 ((FIT_GARMIN_PRODUCT)2148) +#define FIT_GARMIN_PRODUCT_VIVO_FIT2 ((FIT_GARMIN_PRODUCT)2150) +#define FIT_GARMIN_PRODUCT_FR225 ((FIT_GARMIN_PRODUCT)2153) +#define FIT_GARMIN_PRODUCT_FR630 ((FIT_GARMIN_PRODUCT)2156) +#define FIT_GARMIN_PRODUCT_FR230 ((FIT_GARMIN_PRODUCT)2157) +#define FIT_GARMIN_PRODUCT_FR735XT ((FIT_GARMIN_PRODUCT)2158) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_APAC ((FIT_GARMIN_PRODUCT)2160) +#define FIT_GARMIN_PRODUCT_VECTOR_2 ((FIT_GARMIN_PRODUCT)2161) +#define FIT_GARMIN_PRODUCT_VECTOR_2S ((FIT_GARMIN_PRODUCT)2162) +#define FIT_GARMIN_PRODUCT_VIRBXE ((FIT_GARMIN_PRODUCT)2172) +#define FIT_GARMIN_PRODUCT_FR620_TAIWAN ((FIT_GARMIN_PRODUCT)2173) +#define FIT_GARMIN_PRODUCT_FR220_TAIWAN ((FIT_GARMIN_PRODUCT)2174) +#define FIT_GARMIN_PRODUCT_TRUSWING ((FIT_GARMIN_PRODUCT)2175) +#define FIT_GARMIN_PRODUCT_D2AIRVENU ((FIT_GARMIN_PRODUCT)2187) +#define FIT_GARMIN_PRODUCT_FENIX3_CHINA ((FIT_GARMIN_PRODUCT)2188) +#define FIT_GARMIN_PRODUCT_FENIX3_TWN ((FIT_GARMIN_PRODUCT)2189) +#define FIT_GARMIN_PRODUCT_VARIA_HEADLIGHT ((FIT_GARMIN_PRODUCT)2192) +#define FIT_GARMIN_PRODUCT_VARIA_TAILLIGHT_OLD ((FIT_GARMIN_PRODUCT)2193) +#define FIT_GARMIN_PRODUCT_EDGE_EXPLORE_1000 ((FIT_GARMIN_PRODUCT)2204) +#define FIT_GARMIN_PRODUCT_FR225_ASIA ((FIT_GARMIN_PRODUCT)2219) +#define FIT_GARMIN_PRODUCT_VARIA_RADAR_TAILLIGHT ((FIT_GARMIN_PRODUCT)2225) +#define FIT_GARMIN_PRODUCT_VARIA_RADAR_DISPLAY ((FIT_GARMIN_PRODUCT)2226) +#define FIT_GARMIN_PRODUCT_EDGE20 ((FIT_GARMIN_PRODUCT)2238) +#define FIT_GARMIN_PRODUCT_EDGE520_ASIA ((FIT_GARMIN_PRODUCT)2260) +#define FIT_GARMIN_PRODUCT_EDGE520_JAPAN ((FIT_GARMIN_PRODUCT)2261) +#define FIT_GARMIN_PRODUCT_D2_BRAVO ((FIT_GARMIN_PRODUCT)2262) +#define FIT_GARMIN_PRODUCT_APPROACH_S20 ((FIT_GARMIN_PRODUCT)2266) +#define FIT_GARMIN_PRODUCT_VIVO_SMART2 ((FIT_GARMIN_PRODUCT)2271) +#define FIT_GARMIN_PRODUCT_EDGE1000_THAI ((FIT_GARMIN_PRODUCT)2274) +#define FIT_GARMIN_PRODUCT_VARIA_REMOTE ((FIT_GARMIN_PRODUCT)2276) +#define FIT_GARMIN_PRODUCT_EDGE25_ASIA ((FIT_GARMIN_PRODUCT)2288) +#define FIT_GARMIN_PRODUCT_EDGE25_JPN ((FIT_GARMIN_PRODUCT)2289) +#define FIT_GARMIN_PRODUCT_EDGE20_ASIA ((FIT_GARMIN_PRODUCT)2290) +#define FIT_GARMIN_PRODUCT_APPROACH_X40 ((FIT_GARMIN_PRODUCT)2292) +#define FIT_GARMIN_PRODUCT_FENIX3_JAPAN ((FIT_GARMIN_PRODUCT)2293) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_EMEA ((FIT_GARMIN_PRODUCT)2294) +#define FIT_GARMIN_PRODUCT_FR630_ASIA ((FIT_GARMIN_PRODUCT)2310) +#define FIT_GARMIN_PRODUCT_FR630_JPN ((FIT_GARMIN_PRODUCT)2311) +#define FIT_GARMIN_PRODUCT_FR230_JPN ((FIT_GARMIN_PRODUCT)2313) +#define FIT_GARMIN_PRODUCT_HRM4_RUN ((FIT_GARMIN_PRODUCT)2327) +#define FIT_GARMIN_PRODUCT_EPIX_JAPAN ((FIT_GARMIN_PRODUCT)2332) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_HR ((FIT_GARMIN_PRODUCT)2337) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_GPS_HR ((FIT_GARMIN_PRODUCT)2347) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_HR ((FIT_GARMIN_PRODUCT)2348) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_HR_ASIA ((FIT_GARMIN_PRODUCT)2361) +#define FIT_GARMIN_PRODUCT_VIVO_SMART_GPS_HR_ASIA ((FIT_GARMIN_PRODUCT)2362) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE ((FIT_GARMIN_PRODUCT)2368) +#define FIT_GARMIN_PRODUCT_VARIA_TAILLIGHT ((FIT_GARMIN_PRODUCT)2379) +#define FIT_GARMIN_PRODUCT_FR235_ASIA ((FIT_GARMIN_PRODUCT)2396) +#define FIT_GARMIN_PRODUCT_FR235_JAPAN ((FIT_GARMIN_PRODUCT)2397) +#define FIT_GARMIN_PRODUCT_VARIA_VISION ((FIT_GARMIN_PRODUCT)2398) +#define FIT_GARMIN_PRODUCT_VIVO_FIT3 ((FIT_GARMIN_PRODUCT)2406) +#define FIT_GARMIN_PRODUCT_FENIX3_KOREA ((FIT_GARMIN_PRODUCT)2407) +#define FIT_GARMIN_PRODUCT_FENIX3_SEA ((FIT_GARMIN_PRODUCT)2408) +#define FIT_GARMIN_PRODUCT_FENIX3_HR ((FIT_GARMIN_PRODUCT)2413) +#define FIT_GARMIN_PRODUCT_VIRB_ULTRA_30 ((FIT_GARMIN_PRODUCT)2417) +#define FIT_GARMIN_PRODUCT_INDEX_SMART_SCALE ((FIT_GARMIN_PRODUCT)2429) +#define FIT_GARMIN_PRODUCT_FR235 ((FIT_GARMIN_PRODUCT)2431) +#define FIT_GARMIN_PRODUCT_FENIX3_CHRONOS ((FIT_GARMIN_PRODUCT)2432) +#define FIT_GARMIN_PRODUCT_OREGON7XX ((FIT_GARMIN_PRODUCT)2441) +#define FIT_GARMIN_PRODUCT_RINO7XX ((FIT_GARMIN_PRODUCT)2444) +#define FIT_GARMIN_PRODUCT_EPIX_KOREA ((FIT_GARMIN_PRODUCT)2457) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_CHN ((FIT_GARMIN_PRODUCT)2473) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_TWN ((FIT_GARMIN_PRODUCT)2474) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_JPN ((FIT_GARMIN_PRODUCT)2475) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_SEA ((FIT_GARMIN_PRODUCT)2476) +#define FIT_GARMIN_PRODUCT_FENIX3_HR_KOR ((FIT_GARMIN_PRODUCT)2477) +#define FIT_GARMIN_PRODUCT_NAUTIX ((FIT_GARMIN_PRODUCT)2496) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_HR_APAC ((FIT_GARMIN_PRODUCT)2497) +#define FIT_GARMIN_PRODUCT_OREGON7XX_WW ((FIT_GARMIN_PRODUCT)2512) +#define FIT_GARMIN_PRODUCT_EDGE_820 ((FIT_GARMIN_PRODUCT)2530) +#define FIT_GARMIN_PRODUCT_EDGE_EXPLORE_820 ((FIT_GARMIN_PRODUCT)2531) +#define FIT_GARMIN_PRODUCT_FR735XT_APAC ((FIT_GARMIN_PRODUCT)2533) +#define FIT_GARMIN_PRODUCT_FR735XT_JAPAN ((FIT_GARMIN_PRODUCT)2534) +#define FIT_GARMIN_PRODUCT_FENIX5S ((FIT_GARMIN_PRODUCT)2544) +#define FIT_GARMIN_PRODUCT_D2_BRAVO_TITANIUM ((FIT_GARMIN_PRODUCT)2547) +#define FIT_GARMIN_PRODUCT_VARIA_UT800 ((FIT_GARMIN_PRODUCT)2567) // Varia UT 800 SW +#define FIT_GARMIN_PRODUCT_RUNNING_DYNAMICS_POD ((FIT_GARMIN_PRODUCT)2593) +#define FIT_GARMIN_PRODUCT_EDGE_820_CHINA ((FIT_GARMIN_PRODUCT)2599) +#define FIT_GARMIN_PRODUCT_EDGE_820_JAPAN ((FIT_GARMIN_PRODUCT)2600) +#define FIT_GARMIN_PRODUCT_FENIX5X ((FIT_GARMIN_PRODUCT)2604) +#define FIT_GARMIN_PRODUCT_VIVO_FIT_JR ((FIT_GARMIN_PRODUCT)2606) +#define FIT_GARMIN_PRODUCT_VIVO_SMART3 ((FIT_GARMIN_PRODUCT)2622) +#define FIT_GARMIN_PRODUCT_VIVO_SPORT ((FIT_GARMIN_PRODUCT)2623) +#define FIT_GARMIN_PRODUCT_EDGE_820_TAIWAN ((FIT_GARMIN_PRODUCT)2628) +#define FIT_GARMIN_PRODUCT_EDGE_820_KOREA ((FIT_GARMIN_PRODUCT)2629) +#define FIT_GARMIN_PRODUCT_EDGE_820_SEA ((FIT_GARMIN_PRODUCT)2630) +#define FIT_GARMIN_PRODUCT_FR35_HEBREW ((FIT_GARMIN_PRODUCT)2650) +#define FIT_GARMIN_PRODUCT_APPROACH_S60 ((FIT_GARMIN_PRODUCT)2656) +#define FIT_GARMIN_PRODUCT_FR35_APAC ((FIT_GARMIN_PRODUCT)2667) +#define FIT_GARMIN_PRODUCT_FR35_JAPAN ((FIT_GARMIN_PRODUCT)2668) +#define FIT_GARMIN_PRODUCT_FENIX3_CHRONOS_ASIA ((FIT_GARMIN_PRODUCT)2675) +#define FIT_GARMIN_PRODUCT_VIRB_360 ((FIT_GARMIN_PRODUCT)2687) +#define FIT_GARMIN_PRODUCT_FR935 ((FIT_GARMIN_PRODUCT)2691) +#define FIT_GARMIN_PRODUCT_FENIX5 ((FIT_GARMIN_PRODUCT)2697) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3 ((FIT_GARMIN_PRODUCT)2700) +#define FIT_GARMIN_PRODUCT_FR235_CHINA_NFC ((FIT_GARMIN_PRODUCT)2733) +#define FIT_GARMIN_PRODUCT_FORETREX_601_701 ((FIT_GARMIN_PRODUCT)2769) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE_HR ((FIT_GARMIN_PRODUCT)2772) +#define FIT_GARMIN_PRODUCT_EDGE_1030 ((FIT_GARMIN_PRODUCT)2713) +#define FIT_GARMIN_PRODUCT_FR35_SEA ((FIT_GARMIN_PRODUCT)2727) +#define FIT_GARMIN_PRODUCT_VECTOR_3 ((FIT_GARMIN_PRODUCT)2787) +#define FIT_GARMIN_PRODUCT_FENIX5_ASIA ((FIT_GARMIN_PRODUCT)2796) +#define FIT_GARMIN_PRODUCT_FENIX5S_ASIA ((FIT_GARMIN_PRODUCT)2797) +#define FIT_GARMIN_PRODUCT_FENIX5X_ASIA ((FIT_GARMIN_PRODUCT)2798) +#define FIT_GARMIN_PRODUCT_APPROACH_Z80 ((FIT_GARMIN_PRODUCT)2806) +#define FIT_GARMIN_PRODUCT_FR35_KOREA ((FIT_GARMIN_PRODUCT)2814) +#define FIT_GARMIN_PRODUCT_D2CHARLIE ((FIT_GARMIN_PRODUCT)2819) +#define FIT_GARMIN_PRODUCT_VIVO_SMART3_APAC ((FIT_GARMIN_PRODUCT)2831) +#define FIT_GARMIN_PRODUCT_VIVO_SPORT_APAC ((FIT_GARMIN_PRODUCT)2832) +#define FIT_GARMIN_PRODUCT_FR935_ASIA ((FIT_GARMIN_PRODUCT)2833) +#define FIT_GARMIN_PRODUCT_DESCENT ((FIT_GARMIN_PRODUCT)2859) +#define FIT_GARMIN_PRODUCT_VIVO_FIT4 ((FIT_GARMIN_PRODUCT)2878) +#define FIT_GARMIN_PRODUCT_FR645 ((FIT_GARMIN_PRODUCT)2886) +#define FIT_GARMIN_PRODUCT_FR645M ((FIT_GARMIN_PRODUCT)2888) +#define FIT_GARMIN_PRODUCT_FR30 ((FIT_GARMIN_PRODUCT)2891) +#define FIT_GARMIN_PRODUCT_FENIX5S_PLUS ((FIT_GARMIN_PRODUCT)2900) +#define FIT_GARMIN_PRODUCT_EDGE_130 ((FIT_GARMIN_PRODUCT)2909) +#define FIT_GARMIN_PRODUCT_EDGE_1030_ASIA ((FIT_GARMIN_PRODUCT)2924) +#define FIT_GARMIN_PRODUCT_VIVOSMART_4 ((FIT_GARMIN_PRODUCT)2927) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE_HR_ASIA ((FIT_GARMIN_PRODUCT)2945) +#define FIT_GARMIN_PRODUCT_APPROACH_X10 ((FIT_GARMIN_PRODUCT)2962) +#define FIT_GARMIN_PRODUCT_FR30_ASIA ((FIT_GARMIN_PRODUCT)2977) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3M_W ((FIT_GARMIN_PRODUCT)2988) +#define FIT_GARMIN_PRODUCT_FR645_ASIA ((FIT_GARMIN_PRODUCT)3003) +#define FIT_GARMIN_PRODUCT_FR645M_ASIA ((FIT_GARMIN_PRODUCT)3004) +#define FIT_GARMIN_PRODUCT_EDGE_EXPLORE ((FIT_GARMIN_PRODUCT)3011) +#define FIT_GARMIN_PRODUCT_GPSMAP66 ((FIT_GARMIN_PRODUCT)3028) +#define FIT_GARMIN_PRODUCT_APPROACH_S10 ((FIT_GARMIN_PRODUCT)3049) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3M_L ((FIT_GARMIN_PRODUCT)3066) +#define FIT_GARMIN_PRODUCT_APPROACH_G80 ((FIT_GARMIN_PRODUCT)3085) +#define FIT_GARMIN_PRODUCT_EDGE_130_ASIA ((FIT_GARMIN_PRODUCT)3092) +#define FIT_GARMIN_PRODUCT_EDGE_1030_BONTRAGER ((FIT_GARMIN_PRODUCT)3095) +#define FIT_GARMIN_PRODUCT_FENIX5_PLUS ((FIT_GARMIN_PRODUCT)3110) +#define FIT_GARMIN_PRODUCT_FENIX5X_PLUS ((FIT_GARMIN_PRODUCT)3111) +#define FIT_GARMIN_PRODUCT_EDGE_520_PLUS ((FIT_GARMIN_PRODUCT)3112) +#define FIT_GARMIN_PRODUCT_FR945 ((FIT_GARMIN_PRODUCT)3113) +#define FIT_GARMIN_PRODUCT_EDGE_530 ((FIT_GARMIN_PRODUCT)3121) +#define FIT_GARMIN_PRODUCT_EDGE_830 ((FIT_GARMIN_PRODUCT)3122) +#define FIT_GARMIN_PRODUCT_INSTINCT_ESPORTS ((FIT_GARMIN_PRODUCT)3126) +#define FIT_GARMIN_PRODUCT_FENIX5S_PLUS_APAC ((FIT_GARMIN_PRODUCT)3134) +#define FIT_GARMIN_PRODUCT_FENIX5X_PLUS_APAC ((FIT_GARMIN_PRODUCT)3135) +#define FIT_GARMIN_PRODUCT_EDGE_520_PLUS_APAC ((FIT_GARMIN_PRODUCT)3142) +#define FIT_GARMIN_PRODUCT_FR235L_ASIA ((FIT_GARMIN_PRODUCT)3144) +#define FIT_GARMIN_PRODUCT_FR245_ASIA ((FIT_GARMIN_PRODUCT)3145) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE3M_APAC ((FIT_GARMIN_PRODUCT)3163) +#define FIT_GARMIN_PRODUCT_GEN3_BSM ((FIT_GARMIN_PRODUCT)3192) // gen3 bike speed sensor +#define FIT_GARMIN_PRODUCT_GEN3_BCM ((FIT_GARMIN_PRODUCT)3193) // gen3 bike cadence sensor +#define FIT_GARMIN_PRODUCT_VIVO_SMART4_ASIA ((FIT_GARMIN_PRODUCT)3218) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE4_SMALL ((FIT_GARMIN_PRODUCT)3224) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE4_LARGE ((FIT_GARMIN_PRODUCT)3225) +#define FIT_GARMIN_PRODUCT_VENU ((FIT_GARMIN_PRODUCT)3226) +#define FIT_GARMIN_PRODUCT_MARQ_DRIVER ((FIT_GARMIN_PRODUCT)3246) +#define FIT_GARMIN_PRODUCT_MARQ_AVIATOR ((FIT_GARMIN_PRODUCT)3247) +#define FIT_GARMIN_PRODUCT_MARQ_CAPTAIN ((FIT_GARMIN_PRODUCT)3248) +#define FIT_GARMIN_PRODUCT_MARQ_COMMANDER ((FIT_GARMIN_PRODUCT)3249) +#define FIT_GARMIN_PRODUCT_MARQ_EXPEDITION ((FIT_GARMIN_PRODUCT)3250) +#define FIT_GARMIN_PRODUCT_MARQ_ATHLETE ((FIT_GARMIN_PRODUCT)3251) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2 ((FIT_GARMIN_PRODUCT)3258) +#define FIT_GARMIN_PRODUCT_GPSMAP66I ((FIT_GARMIN_PRODUCT)3284) +#define FIT_GARMIN_PRODUCT_FENIX6S_SPORT ((FIT_GARMIN_PRODUCT)3287) +#define FIT_GARMIN_PRODUCT_FENIX6S ((FIT_GARMIN_PRODUCT)3288) +#define FIT_GARMIN_PRODUCT_FENIX6_SPORT ((FIT_GARMIN_PRODUCT)3289) +#define FIT_GARMIN_PRODUCT_FENIX6 ((FIT_GARMIN_PRODUCT)3290) +#define FIT_GARMIN_PRODUCT_FENIX6X ((FIT_GARMIN_PRODUCT)3291) +#define FIT_GARMIN_PRODUCT_HRM_DUAL ((FIT_GARMIN_PRODUCT)3299) // HRM-Dual +#define FIT_GARMIN_PRODUCT_HRM_PRO ((FIT_GARMIN_PRODUCT)3300) // HRM-Pro +#define FIT_GARMIN_PRODUCT_VIVO_MOVE3_PREMIUM ((FIT_GARMIN_PRODUCT)3308) +#define FIT_GARMIN_PRODUCT_APPROACH_S40 ((FIT_GARMIN_PRODUCT)3314) +#define FIT_GARMIN_PRODUCT_FR245M_ASIA ((FIT_GARMIN_PRODUCT)3321) +#define FIT_GARMIN_PRODUCT_EDGE_530_APAC ((FIT_GARMIN_PRODUCT)3349) +#define FIT_GARMIN_PRODUCT_EDGE_830_APAC ((FIT_GARMIN_PRODUCT)3350) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE3 ((FIT_GARMIN_PRODUCT)3378) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE4_SMALL_ASIA ((FIT_GARMIN_PRODUCT)3387) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE4_LARGE_ASIA ((FIT_GARMIN_PRODUCT)3388) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE4_OLED_ASIA ((FIT_GARMIN_PRODUCT)3389) +#define FIT_GARMIN_PRODUCT_SWIM2 ((FIT_GARMIN_PRODUCT)3405) +#define FIT_GARMIN_PRODUCT_MARQ_DRIVER_ASIA ((FIT_GARMIN_PRODUCT)3420) +#define FIT_GARMIN_PRODUCT_MARQ_AVIATOR_ASIA ((FIT_GARMIN_PRODUCT)3421) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE3_ASIA ((FIT_GARMIN_PRODUCT)3422) +#define FIT_GARMIN_PRODUCT_FR945_ASIA ((FIT_GARMIN_PRODUCT)3441) +#define FIT_GARMIN_PRODUCT_VIVO_ACTIVE3T_CHN ((FIT_GARMIN_PRODUCT)3446) +#define FIT_GARMIN_PRODUCT_MARQ_CAPTAIN_ASIA ((FIT_GARMIN_PRODUCT)3448) +#define FIT_GARMIN_PRODUCT_MARQ_COMMANDER_ASIA ((FIT_GARMIN_PRODUCT)3449) +#define FIT_GARMIN_PRODUCT_MARQ_EXPEDITION_ASIA ((FIT_GARMIN_PRODUCT)3450) +#define FIT_GARMIN_PRODUCT_MARQ_ATHLETE_ASIA ((FIT_GARMIN_PRODUCT)3451) +#define FIT_GARMIN_PRODUCT_INSTINCT_SOLAR ((FIT_GARMIN_PRODUCT)3466) +#define FIT_GARMIN_PRODUCT_FR45_ASIA ((FIT_GARMIN_PRODUCT)3469) +#define FIT_GARMIN_PRODUCT_VIVOACTIVE3_DAIMLER ((FIT_GARMIN_PRODUCT)3473) +#define FIT_GARMIN_PRODUCT_LEGACY_REY ((FIT_GARMIN_PRODUCT)3498) +#define FIT_GARMIN_PRODUCT_LEGACY_DARTH_VADER ((FIT_GARMIN_PRODUCT)3499) +#define FIT_GARMIN_PRODUCT_LEGACY_CAPTAIN_MARVEL ((FIT_GARMIN_PRODUCT)3500) +#define FIT_GARMIN_PRODUCT_LEGACY_FIRST_AVENGER ((FIT_GARMIN_PRODUCT)3501) +#define FIT_GARMIN_PRODUCT_FENIX6S_SPORT_ASIA ((FIT_GARMIN_PRODUCT)3512) +#define FIT_GARMIN_PRODUCT_FENIX6S_ASIA ((FIT_GARMIN_PRODUCT)3513) +#define FIT_GARMIN_PRODUCT_FENIX6_SPORT_ASIA ((FIT_GARMIN_PRODUCT)3514) +#define FIT_GARMIN_PRODUCT_FENIX6_ASIA ((FIT_GARMIN_PRODUCT)3515) +#define FIT_GARMIN_PRODUCT_FENIX6X_ASIA ((FIT_GARMIN_PRODUCT)3516) +#define FIT_GARMIN_PRODUCT_LEGACY_CAPTAIN_MARVEL_ASIA ((FIT_GARMIN_PRODUCT)3535) +#define FIT_GARMIN_PRODUCT_LEGACY_FIRST_AVENGER_ASIA ((FIT_GARMIN_PRODUCT)3536) +#define FIT_GARMIN_PRODUCT_LEGACY_REY_ASIA ((FIT_GARMIN_PRODUCT)3537) +#define FIT_GARMIN_PRODUCT_LEGACY_DARTH_VADER_ASIA ((FIT_GARMIN_PRODUCT)3538) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2S ((FIT_GARMIN_PRODUCT)3542) +#define FIT_GARMIN_PRODUCT_EDGE_130_PLUS ((FIT_GARMIN_PRODUCT)3558) +#define FIT_GARMIN_PRODUCT_EDGE_1030_PLUS ((FIT_GARMIN_PRODUCT)3570) +#define FIT_GARMIN_PRODUCT_RALLY_200 ((FIT_GARMIN_PRODUCT)3578) // Rally 100/200 Power Meter Series +#define FIT_GARMIN_PRODUCT_FR745 ((FIT_GARMIN_PRODUCT)3589) +#define FIT_GARMIN_PRODUCT_VENUSQ ((FIT_GARMIN_PRODUCT)3600) +#define FIT_GARMIN_PRODUCT_LILY ((FIT_GARMIN_PRODUCT)3615) +#define FIT_GARMIN_PRODUCT_MARQ_ADVENTURER ((FIT_GARMIN_PRODUCT)3624) +#define FIT_GARMIN_PRODUCT_ENDURO ((FIT_GARMIN_PRODUCT)3638) +#define FIT_GARMIN_PRODUCT_SWIM2_APAC ((FIT_GARMIN_PRODUCT)3639) +#define FIT_GARMIN_PRODUCT_MARQ_ADVENTURER_ASIA ((FIT_GARMIN_PRODUCT)3648) +#define FIT_GARMIN_PRODUCT_FR945_LTE ((FIT_GARMIN_PRODUCT)3652) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2_ASIA ((FIT_GARMIN_PRODUCT)3702) // Mk2 and Mk2i +#define FIT_GARMIN_PRODUCT_VENU2 ((FIT_GARMIN_PRODUCT)3703) +#define FIT_GARMIN_PRODUCT_VENU2S ((FIT_GARMIN_PRODUCT)3704) +#define FIT_GARMIN_PRODUCT_VENU_DAIMLER_ASIA ((FIT_GARMIN_PRODUCT)3737) +#define FIT_GARMIN_PRODUCT_MARQ_GOLFER ((FIT_GARMIN_PRODUCT)3739) +#define FIT_GARMIN_PRODUCT_VENU_DAIMLER ((FIT_GARMIN_PRODUCT)3740) +#define FIT_GARMIN_PRODUCT_FR745_ASIA ((FIT_GARMIN_PRODUCT)3794) +#define FIT_GARMIN_PRODUCT_LILY_ASIA ((FIT_GARMIN_PRODUCT)3809) +#define FIT_GARMIN_PRODUCT_EDGE_1030_PLUS_ASIA ((FIT_GARMIN_PRODUCT)3812) +#define FIT_GARMIN_PRODUCT_EDGE_130_PLUS_ASIA ((FIT_GARMIN_PRODUCT)3813) +#define FIT_GARMIN_PRODUCT_APPROACH_S12 ((FIT_GARMIN_PRODUCT)3823) +#define FIT_GARMIN_PRODUCT_ENDURO_ASIA ((FIT_GARMIN_PRODUCT)3872) +#define FIT_GARMIN_PRODUCT_VENUSQ_ASIA ((FIT_GARMIN_PRODUCT)3837) +#define FIT_GARMIN_PRODUCT_EDGE_1040 ((FIT_GARMIN_PRODUCT)3843) +#define FIT_GARMIN_PRODUCT_MARQ_GOLFER_ASIA ((FIT_GARMIN_PRODUCT)3850) +#define FIT_GARMIN_PRODUCT_VENU2_PLUS ((FIT_GARMIN_PRODUCT)3851) +#define FIT_GARMIN_PRODUCT_FR55 ((FIT_GARMIN_PRODUCT)3869) +#define FIT_GARMIN_PRODUCT_INSTINCT_2 ((FIT_GARMIN_PRODUCT)3888) +#define FIT_GARMIN_PRODUCT_FENIX7S ((FIT_GARMIN_PRODUCT)3905) +#define FIT_GARMIN_PRODUCT_FENIX7 ((FIT_GARMIN_PRODUCT)3906) +#define FIT_GARMIN_PRODUCT_FENIX7X ((FIT_GARMIN_PRODUCT)3907) +#define FIT_GARMIN_PRODUCT_FENIX7S_APAC ((FIT_GARMIN_PRODUCT)3908) +#define FIT_GARMIN_PRODUCT_FENIX7_APAC ((FIT_GARMIN_PRODUCT)3909) +#define FIT_GARMIN_PRODUCT_FENIX7X_APAC ((FIT_GARMIN_PRODUCT)3910) +#define FIT_GARMIN_PRODUCT_APPROACH_G12 ((FIT_GARMIN_PRODUCT) 3927) +#define FIT_GARMIN_PRODUCT_DESCENT_MK2S_ASIA ((FIT_GARMIN_PRODUCT)3930) +#define FIT_GARMIN_PRODUCT_APPROACH_S42 ((FIT_GARMIN_PRODUCT)3934) +#define FIT_GARMIN_PRODUCT_EPIX_GEN2 ((FIT_GARMIN_PRODUCT)3943) +#define FIT_GARMIN_PRODUCT_EPIX_GEN2_APAC ((FIT_GARMIN_PRODUCT)3944) +#define FIT_GARMIN_PRODUCT_VENU2S_ASIA ((FIT_GARMIN_PRODUCT)3949) +#define FIT_GARMIN_PRODUCT_VENU2_ASIA ((FIT_GARMIN_PRODUCT)3950) +#define FIT_GARMIN_PRODUCT_FR945_LTE_ASIA ((FIT_GARMIN_PRODUCT)3978) +#define FIT_GARMIN_PRODUCT_VIVO_MOVE_SPORT ((FIT_GARMIN_PRODUCT)3982) +#define FIT_GARMIN_PRODUCT_APPROACH_S12_ASIA ((FIT_GARMIN_PRODUCT)3986) +#define FIT_GARMIN_PRODUCT_FR255_MUSIC ((FIT_GARMIN_PRODUCT)3990) +#define FIT_GARMIN_PRODUCT_FR255_SMALL_MUSIC ((FIT_GARMIN_PRODUCT)3991) +#define FIT_GARMIN_PRODUCT_FR255 ((FIT_GARMIN_PRODUCT)3992) +#define FIT_GARMIN_PRODUCT_FR255_SMALL ((FIT_GARMIN_PRODUCT)3993) +#define FIT_GARMIN_PRODUCT_APPROACH_G12_ASIA ((FIT_GARMIN_PRODUCT) 4001) +#define FIT_GARMIN_PRODUCT_APPROACH_S42_ASIA ((FIT_GARMIN_PRODUCT)4002) +#define FIT_GARMIN_PRODUCT_DESCENT_G1 ((FIT_GARMIN_PRODUCT)4005) +#define FIT_GARMIN_PRODUCT_VENU2_PLUS_ASIA ((FIT_GARMIN_PRODUCT)4017) +#define FIT_GARMIN_PRODUCT_FR955 ((FIT_GARMIN_PRODUCT)4024) +#define FIT_GARMIN_PRODUCT_FR55_ASIA ((FIT_GARMIN_PRODUCT)4033) +#define FIT_GARMIN_PRODUCT_VIVOSMART_5 ((FIT_GARMIN_PRODUCT)4063) +#define FIT_GARMIN_PRODUCT_INSTINCT_2_ASIA ((FIT_GARMIN_PRODUCT)4071) +#define FIT_GARMIN_PRODUCT_VENUSQ2 ((FIT_GARMIN_PRODUCT)4115) +#define FIT_GARMIN_PRODUCT_VENUSQ2MUSIC ((FIT_GARMIN_PRODUCT)4116) +#define FIT_GARMIN_PRODUCT_D2_AIR_X10 ((FIT_GARMIN_PRODUCT)4125) +#define FIT_GARMIN_PRODUCT_HRM_PRO_PLUS ((FIT_GARMIN_PRODUCT)4130) +#define FIT_GARMIN_PRODUCT_DESCENT_G1_ASIA ((FIT_GARMIN_PRODUCT)4132) +#define FIT_GARMIN_PRODUCT_TACTIX7 ((FIT_GARMIN_PRODUCT)4135) +#define FIT_GARMIN_PRODUCT_EDGE_EXPLORE2 ((FIT_GARMIN_PRODUCT)4169) +#define FIT_GARMIN_PRODUCT_TACX_NEO_SMART ((FIT_GARMIN_PRODUCT)4265) // Neo Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_NEO2_SMART ((FIT_GARMIN_PRODUCT)4266) // Neo 2 Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_NEO2_T_SMART ((FIT_GARMIN_PRODUCT)4267) // Neo 2T Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_NEO_SMART_BIKE ((FIT_GARMIN_PRODUCT)4268) // Neo Smart Bike, Tacx +#define FIT_GARMIN_PRODUCT_TACX_SATORI_SMART ((FIT_GARMIN_PRODUCT)4269) // Satori Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_FLOW_SMART ((FIT_GARMIN_PRODUCT)4270) // Flow Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_VORTEX_SMART ((FIT_GARMIN_PRODUCT)4271) // Vortex Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_BUSHIDO_SMART ((FIT_GARMIN_PRODUCT)4272) // Bushido Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_GENIUS_SMART ((FIT_GARMIN_PRODUCT)4273) // Genius Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_FLUX_FLUX_S_SMART ((FIT_GARMIN_PRODUCT)4274) // Flux/Flux S Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_FLUX2_SMART ((FIT_GARMIN_PRODUCT)4275) // Flux 2 Smart, Tacx +#define FIT_GARMIN_PRODUCT_TACX_MAGNUM ((FIT_GARMIN_PRODUCT)4276) // Magnum, Tacx +#define FIT_GARMIN_PRODUCT_EDGE_1040_ASIA ((FIT_GARMIN_PRODUCT)4305) +#define FIT_GARMIN_PRODUCT_ENDURO2 ((FIT_GARMIN_PRODUCT)4341) +#define FIT_GARMIN_PRODUCT_SDM4 ((FIT_GARMIN_PRODUCT)10007) // SDM4 footpod +#define FIT_GARMIN_PRODUCT_EDGE_REMOTE ((FIT_GARMIN_PRODUCT)10014) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_WIN ((FIT_GARMIN_PRODUCT)20533) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_MAC ((FIT_GARMIN_PRODUCT)20534) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_MAC_CATALYST ((FIT_GARMIN_PRODUCT)20565) +#define FIT_GARMIN_PRODUCT_TRAINING_CENTER ((FIT_GARMIN_PRODUCT)20119) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_ANDROID ((FIT_GARMIN_PRODUCT)30045) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_IOS ((FIT_GARMIN_PRODUCT)30046) +#define FIT_GARMIN_PRODUCT_TACX_TRAINING_APP_LEGACY ((FIT_GARMIN_PRODUCT)30047) +#define FIT_GARMIN_PRODUCT_CONNECTIQ_SIMULATOR ((FIT_GARMIN_PRODUCT)65531) +#define FIT_GARMIN_PRODUCT_ANDROID_ANTPLUS_PLUGIN ((FIT_GARMIN_PRODUCT)65532) +#define FIT_GARMIN_PRODUCT_CONNECT ((FIT_GARMIN_PRODUCT)65534) // Garmin Connect website +#define FIT_GARMIN_PRODUCT_COUNT 400 + +typedef FIT_UINT8 FIT_ANTPLUS_DEVICE_TYPE; +#define FIT_ANTPLUS_DEVICE_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_ANTPLUS_DEVICE_TYPE_ANTFS ((FIT_ANTPLUS_DEVICE_TYPE)1) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_POWER ((FIT_ANTPLUS_DEVICE_TYPE)11) +#define FIT_ANTPLUS_DEVICE_TYPE_ENVIRONMENT_SENSOR_LEGACY ((FIT_ANTPLUS_DEVICE_TYPE)12) +#define FIT_ANTPLUS_DEVICE_TYPE_MULTI_SPORT_SPEED_DISTANCE ((FIT_ANTPLUS_DEVICE_TYPE)15) +#define FIT_ANTPLUS_DEVICE_TYPE_CONTROL ((FIT_ANTPLUS_DEVICE_TYPE)16) +#define FIT_ANTPLUS_DEVICE_TYPE_FITNESS_EQUIPMENT ((FIT_ANTPLUS_DEVICE_TYPE)17) +#define FIT_ANTPLUS_DEVICE_TYPE_BLOOD_PRESSURE ((FIT_ANTPLUS_DEVICE_TYPE)18) +#define FIT_ANTPLUS_DEVICE_TYPE_GEOCACHE_NODE ((FIT_ANTPLUS_DEVICE_TYPE)19) +#define FIT_ANTPLUS_DEVICE_TYPE_LIGHT_ELECTRIC_VEHICLE ((FIT_ANTPLUS_DEVICE_TYPE)20) +#define FIT_ANTPLUS_DEVICE_TYPE_ENV_SENSOR ((FIT_ANTPLUS_DEVICE_TYPE)25) +#define FIT_ANTPLUS_DEVICE_TYPE_RACQUET ((FIT_ANTPLUS_DEVICE_TYPE)26) +#define FIT_ANTPLUS_DEVICE_TYPE_CONTROL_HUB ((FIT_ANTPLUS_DEVICE_TYPE)27) +#define FIT_ANTPLUS_DEVICE_TYPE_MUSCLE_OXYGEN ((FIT_ANTPLUS_DEVICE_TYPE)31) +#define FIT_ANTPLUS_DEVICE_TYPE_SHIFTING ((FIT_ANTPLUS_DEVICE_TYPE)34) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_LIGHT_MAIN ((FIT_ANTPLUS_DEVICE_TYPE)35) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_LIGHT_SHARED ((FIT_ANTPLUS_DEVICE_TYPE)36) +#define FIT_ANTPLUS_DEVICE_TYPE_EXD ((FIT_ANTPLUS_DEVICE_TYPE)38) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_RADAR ((FIT_ANTPLUS_DEVICE_TYPE)40) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_AERO ((FIT_ANTPLUS_DEVICE_TYPE)46) +#define FIT_ANTPLUS_DEVICE_TYPE_WEIGHT_SCALE ((FIT_ANTPLUS_DEVICE_TYPE)119) +#define FIT_ANTPLUS_DEVICE_TYPE_HEART_RATE ((FIT_ANTPLUS_DEVICE_TYPE)120) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_SPEED_CADENCE ((FIT_ANTPLUS_DEVICE_TYPE)121) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_CADENCE ((FIT_ANTPLUS_DEVICE_TYPE)122) +#define FIT_ANTPLUS_DEVICE_TYPE_BIKE_SPEED ((FIT_ANTPLUS_DEVICE_TYPE)123) +#define FIT_ANTPLUS_DEVICE_TYPE_STRIDE_SPEED_DISTANCE ((FIT_ANTPLUS_DEVICE_TYPE)124) +#define FIT_ANTPLUS_DEVICE_TYPE_COUNT 25 + +typedef FIT_ENUM FIT_ANT_NETWORK; +#define FIT_ANT_NETWORK_INVALID FIT_ENUM_INVALID +#define FIT_ANT_NETWORK_PUBLIC ((FIT_ANT_NETWORK)0) +#define FIT_ANT_NETWORK_ANTPLUS ((FIT_ANT_NETWORK)1) +#define FIT_ANT_NETWORK_ANTFS ((FIT_ANT_NETWORK)2) +#define FIT_ANT_NETWORK_PRIVATE ((FIT_ANT_NETWORK)3) +#define FIT_ANT_NETWORK_COUNT 4 + +typedef FIT_UINT32Z FIT_WORKOUT_CAPABILITIES; +#define FIT_WORKOUT_CAPABILITIES_INVALID FIT_UINT32Z_INVALID +#define FIT_WORKOUT_CAPABILITIES_INTERVAL ((FIT_WORKOUT_CAPABILITIES)0x00000001) +#define FIT_WORKOUT_CAPABILITIES_CUSTOM ((FIT_WORKOUT_CAPABILITIES)0x00000002) +#define FIT_WORKOUT_CAPABILITIES_FITNESS_EQUIPMENT ((FIT_WORKOUT_CAPABILITIES)0x00000004) +#define FIT_WORKOUT_CAPABILITIES_FIRSTBEAT ((FIT_WORKOUT_CAPABILITIES)0x00000008) +#define FIT_WORKOUT_CAPABILITIES_NEW_LEAF ((FIT_WORKOUT_CAPABILITIES)0x00000010) +#define FIT_WORKOUT_CAPABILITIES_TCX ((FIT_WORKOUT_CAPABILITIES)0x00000020) // For backwards compatibility. Watch should add missing id fields then clear flag. +#define FIT_WORKOUT_CAPABILITIES_SPEED ((FIT_WORKOUT_CAPABILITIES)0x00000080) // Speed source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_HEART_RATE ((FIT_WORKOUT_CAPABILITIES)0x00000100) // Heart rate source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_DISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00000200) // Distance source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_CADENCE ((FIT_WORKOUT_CAPABILITIES)0x00000400) // Cadence source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_POWER ((FIT_WORKOUT_CAPABILITIES)0x00000800) // Power source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_GRADE ((FIT_WORKOUT_CAPABILITIES)0x00001000) // Grade source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_RESISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00002000) // Resistance source required for workout step. +#define FIT_WORKOUT_CAPABILITIES_PROTECTED ((FIT_WORKOUT_CAPABILITIES)0x00004000) +#define FIT_WORKOUT_CAPABILITIES_COUNT 14 + +typedef FIT_UINT8 FIT_BATTERY_STATUS; +#define FIT_BATTERY_STATUS_INVALID FIT_UINT8_INVALID +#define FIT_BATTERY_STATUS_NEW ((FIT_BATTERY_STATUS)1) +#define FIT_BATTERY_STATUS_GOOD ((FIT_BATTERY_STATUS)2) +#define FIT_BATTERY_STATUS_OK ((FIT_BATTERY_STATUS)3) +#define FIT_BATTERY_STATUS_LOW ((FIT_BATTERY_STATUS)4) +#define FIT_BATTERY_STATUS_CRITICAL ((FIT_BATTERY_STATUS)5) +#define FIT_BATTERY_STATUS_CHARGING ((FIT_BATTERY_STATUS)6) +#define FIT_BATTERY_STATUS_UNKNOWN ((FIT_BATTERY_STATUS)7) +#define FIT_BATTERY_STATUS_COUNT 7 + +typedef FIT_ENUM FIT_HR_TYPE; +#define FIT_HR_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_HR_TYPE_NORMAL ((FIT_HR_TYPE)0) +#define FIT_HR_TYPE_IRREGULAR ((FIT_HR_TYPE)1) +#define FIT_HR_TYPE_COUNT 2 + +typedef FIT_UINT32Z FIT_COURSE_CAPABILITIES; +#define FIT_COURSE_CAPABILITIES_INVALID FIT_UINT32Z_INVALID +#define FIT_COURSE_CAPABILITIES_PROCESSED ((FIT_COURSE_CAPABILITIES)0x00000001) +#define FIT_COURSE_CAPABILITIES_VALID ((FIT_COURSE_CAPABILITIES)0x00000002) +#define FIT_COURSE_CAPABILITIES_TIME ((FIT_COURSE_CAPABILITIES)0x00000004) +#define FIT_COURSE_CAPABILITIES_DISTANCE ((FIT_COURSE_CAPABILITIES)0x00000008) +#define FIT_COURSE_CAPABILITIES_POSITION ((FIT_COURSE_CAPABILITIES)0x00000010) +#define FIT_COURSE_CAPABILITIES_HEART_RATE ((FIT_COURSE_CAPABILITIES)0x00000020) +#define FIT_COURSE_CAPABILITIES_POWER ((FIT_COURSE_CAPABILITIES)0x00000040) +#define FIT_COURSE_CAPABILITIES_CADENCE ((FIT_COURSE_CAPABILITIES)0x00000080) +#define FIT_COURSE_CAPABILITIES_TRAINING ((FIT_COURSE_CAPABILITIES)0x00000100) +#define FIT_COURSE_CAPABILITIES_NAVIGATION ((FIT_COURSE_CAPABILITIES)0x00000200) +#define FIT_COURSE_CAPABILITIES_BIKEWAY ((FIT_COURSE_CAPABILITIES)0x00000400) +#define FIT_COURSE_CAPABILITIES_COUNT 11 + +typedef FIT_UINT16 FIT_WEIGHT; +#define FIT_WEIGHT_INVALID FIT_UINT16_INVALID +#define FIT_WEIGHT_CALCULATING ((FIT_WEIGHT)0xFFFE) +#define FIT_WEIGHT_COUNT 1 + +typedef FIT_UINT32 FIT_WORKOUT_HR; // 0 - 100 indicates% of max hr; >100 indicates bpm (255 max) plus 100 +#define FIT_WORKOUT_HR_INVALID FIT_UINT32_INVALID +#define FIT_WORKOUT_HR_BPM_OFFSET ((FIT_WORKOUT_HR)100) +#define FIT_WORKOUT_HR_COUNT 1 + +typedef FIT_UINT32 FIT_WORKOUT_POWER; // 0 - 1000 indicates % of functional threshold power; >1000 indicates watts plus 1000. +#define FIT_WORKOUT_POWER_INVALID FIT_UINT32_INVALID +#define FIT_WORKOUT_POWER_WATTS_OFFSET ((FIT_WORKOUT_POWER)1000) +#define FIT_WORKOUT_POWER_COUNT 1 + +typedef FIT_ENUM FIT_BP_STATUS; +#define FIT_BP_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_BP_STATUS_NO_ERROR ((FIT_BP_STATUS)0) +#define FIT_BP_STATUS_ERROR_INCOMPLETE_DATA ((FIT_BP_STATUS)1) +#define FIT_BP_STATUS_ERROR_NO_MEASUREMENT ((FIT_BP_STATUS)2) +#define FIT_BP_STATUS_ERROR_DATA_OUT_OF_RANGE ((FIT_BP_STATUS)3) +#define FIT_BP_STATUS_ERROR_IRREGULAR_HEART_RATE ((FIT_BP_STATUS)4) +#define FIT_BP_STATUS_COUNT 5 + +typedef FIT_UINT16 FIT_USER_LOCAL_ID; +#define FIT_USER_LOCAL_ID_INVALID FIT_UINT16_INVALID +#define FIT_USER_LOCAL_ID_LOCAL_MIN ((FIT_USER_LOCAL_ID)0x0000) +#define FIT_USER_LOCAL_ID_LOCAL_MAX ((FIT_USER_LOCAL_ID)0x000F) +#define FIT_USER_LOCAL_ID_STATIONARY_MIN ((FIT_USER_LOCAL_ID)0x0010) +#define FIT_USER_LOCAL_ID_STATIONARY_MAX ((FIT_USER_LOCAL_ID)0x00FF) +#define FIT_USER_LOCAL_ID_PORTABLE_MIN ((FIT_USER_LOCAL_ID)0x0100) +#define FIT_USER_LOCAL_ID_PORTABLE_MAX ((FIT_USER_LOCAL_ID)0xFFFE) +#define FIT_USER_LOCAL_ID_COUNT 6 + +typedef FIT_ENUM FIT_SWIM_STROKE; +#define FIT_SWIM_STROKE_INVALID FIT_ENUM_INVALID +#define FIT_SWIM_STROKE_FREESTYLE ((FIT_SWIM_STROKE)0) +#define FIT_SWIM_STROKE_BACKSTROKE ((FIT_SWIM_STROKE)1) +#define FIT_SWIM_STROKE_BREASTSTROKE ((FIT_SWIM_STROKE)2) +#define FIT_SWIM_STROKE_BUTTERFLY ((FIT_SWIM_STROKE)3) +#define FIT_SWIM_STROKE_DRILL ((FIT_SWIM_STROKE)4) +#define FIT_SWIM_STROKE_MIXED ((FIT_SWIM_STROKE)5) +#define FIT_SWIM_STROKE_IM ((FIT_SWIM_STROKE)6) // IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order. +#define FIT_SWIM_STROKE_COUNT 7 + +typedef FIT_ENUM FIT_ACTIVITY_TYPE; +#define FIT_ACTIVITY_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_TYPE_GENERIC ((FIT_ACTIVITY_TYPE)0) +#define FIT_ACTIVITY_TYPE_RUNNING ((FIT_ACTIVITY_TYPE)1) +#define FIT_ACTIVITY_TYPE_CYCLING ((FIT_ACTIVITY_TYPE)2) +#define FIT_ACTIVITY_TYPE_TRANSITION ((FIT_ACTIVITY_TYPE)3) // Mulitsport transition +#define FIT_ACTIVITY_TYPE_FITNESS_EQUIPMENT ((FIT_ACTIVITY_TYPE)4) +#define FIT_ACTIVITY_TYPE_SWIMMING ((FIT_ACTIVITY_TYPE)5) +#define FIT_ACTIVITY_TYPE_WALKING ((FIT_ACTIVITY_TYPE)6) +#define FIT_ACTIVITY_TYPE_SEDENTARY ((FIT_ACTIVITY_TYPE)8) +#define FIT_ACTIVITY_TYPE_ALL ((FIT_ACTIVITY_TYPE)254) // All is for goals only to include all sports. +#define FIT_ACTIVITY_TYPE_COUNT 9 + +typedef FIT_ENUM FIT_ACTIVITY_SUBTYPE; +#define FIT_ACTIVITY_SUBTYPE_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_SUBTYPE_GENERIC ((FIT_ACTIVITY_SUBTYPE)0) +#define FIT_ACTIVITY_SUBTYPE_TREADMILL ((FIT_ACTIVITY_SUBTYPE)1) // Run +#define FIT_ACTIVITY_SUBTYPE_STREET ((FIT_ACTIVITY_SUBTYPE)2) // Run +#define FIT_ACTIVITY_SUBTYPE_TRAIL ((FIT_ACTIVITY_SUBTYPE)3) // Run +#define FIT_ACTIVITY_SUBTYPE_TRACK ((FIT_ACTIVITY_SUBTYPE)4) // Run +#define FIT_ACTIVITY_SUBTYPE_SPIN ((FIT_ACTIVITY_SUBTYPE)5) // Cycling +#define FIT_ACTIVITY_SUBTYPE_INDOOR_CYCLING ((FIT_ACTIVITY_SUBTYPE)6) // Cycling +#define FIT_ACTIVITY_SUBTYPE_ROAD ((FIT_ACTIVITY_SUBTYPE)7) // Cycling +#define FIT_ACTIVITY_SUBTYPE_MOUNTAIN ((FIT_ACTIVITY_SUBTYPE)8) // Cycling +#define FIT_ACTIVITY_SUBTYPE_DOWNHILL ((FIT_ACTIVITY_SUBTYPE)9) // Cycling +#define FIT_ACTIVITY_SUBTYPE_RECUMBENT ((FIT_ACTIVITY_SUBTYPE)10) // Cycling +#define FIT_ACTIVITY_SUBTYPE_CYCLOCROSS ((FIT_ACTIVITY_SUBTYPE)11) // Cycling +#define FIT_ACTIVITY_SUBTYPE_HAND_CYCLING ((FIT_ACTIVITY_SUBTYPE)12) // Cycling +#define FIT_ACTIVITY_SUBTYPE_TRACK_CYCLING ((FIT_ACTIVITY_SUBTYPE)13) // Cycling +#define FIT_ACTIVITY_SUBTYPE_INDOOR_ROWING ((FIT_ACTIVITY_SUBTYPE)14) // Fitness Equipment +#define FIT_ACTIVITY_SUBTYPE_ELLIPTICAL ((FIT_ACTIVITY_SUBTYPE)15) // Fitness Equipment +#define FIT_ACTIVITY_SUBTYPE_STAIR_CLIMBING ((FIT_ACTIVITY_SUBTYPE)16) // Fitness Equipment +#define FIT_ACTIVITY_SUBTYPE_LAP_SWIMMING ((FIT_ACTIVITY_SUBTYPE)17) // Swimming +#define FIT_ACTIVITY_SUBTYPE_OPEN_WATER ((FIT_ACTIVITY_SUBTYPE)18) // Swimming +#define FIT_ACTIVITY_SUBTYPE_ALL ((FIT_ACTIVITY_SUBTYPE)254) +#define FIT_ACTIVITY_SUBTYPE_COUNT 20 + +typedef FIT_ENUM FIT_ACTIVITY_LEVEL; +#define FIT_ACTIVITY_LEVEL_INVALID FIT_ENUM_INVALID +#define FIT_ACTIVITY_LEVEL_LOW ((FIT_ACTIVITY_LEVEL)0) +#define FIT_ACTIVITY_LEVEL_MEDIUM ((FIT_ACTIVITY_LEVEL)1) +#define FIT_ACTIVITY_LEVEL_HIGH ((FIT_ACTIVITY_LEVEL)2) +#define FIT_ACTIVITY_LEVEL_COUNT 3 + +typedef FIT_ENUM FIT_SIDE; +#define FIT_SIDE_INVALID FIT_ENUM_INVALID +#define FIT_SIDE_RIGHT ((FIT_SIDE)0) +#define FIT_SIDE_LEFT ((FIT_SIDE)1) +#define FIT_SIDE_COUNT 2 + +typedef FIT_UINT8 FIT_LEFT_RIGHT_BALANCE; +#define FIT_LEFT_RIGHT_BALANCE_INVALID FIT_UINT8_INVALID +#define FIT_LEFT_RIGHT_BALANCE_MASK ((FIT_LEFT_RIGHT_BALANCE)0x7F) // % contribution +#define FIT_LEFT_RIGHT_BALANCE_RIGHT ((FIT_LEFT_RIGHT_BALANCE)0x80) // data corresponds to right if set, otherwise unknown +#define FIT_LEFT_RIGHT_BALANCE_COUNT 2 + +typedef FIT_UINT16 FIT_LEFT_RIGHT_BALANCE_100; +#define FIT_LEFT_RIGHT_BALANCE_100_INVALID FIT_UINT16_INVALID +#define FIT_LEFT_RIGHT_BALANCE_100_MASK ((FIT_LEFT_RIGHT_BALANCE_100)0x3FFF) // % contribution scaled by 100 +#define FIT_LEFT_RIGHT_BALANCE_100_RIGHT ((FIT_LEFT_RIGHT_BALANCE_100)0x8000) // data corresponds to right if set, otherwise unknown +#define FIT_LEFT_RIGHT_BALANCE_100_COUNT 2 + +typedef FIT_ENUM FIT_LENGTH_TYPE; +#define FIT_LENGTH_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_LENGTH_TYPE_IDLE ((FIT_LENGTH_TYPE)0) // Rest period. Length with no strokes +#define FIT_LENGTH_TYPE_ACTIVE ((FIT_LENGTH_TYPE)1) // Length with strokes. +#define FIT_LENGTH_TYPE_COUNT 2 + +typedef FIT_ENUM FIT_DAY_OF_WEEK; +#define FIT_DAY_OF_WEEK_INVALID FIT_ENUM_INVALID +#define FIT_DAY_OF_WEEK_SUNDAY ((FIT_DAY_OF_WEEK)0) +#define FIT_DAY_OF_WEEK_MONDAY ((FIT_DAY_OF_WEEK)1) +#define FIT_DAY_OF_WEEK_TUESDAY ((FIT_DAY_OF_WEEK)2) +#define FIT_DAY_OF_WEEK_WEDNESDAY ((FIT_DAY_OF_WEEK)3) +#define FIT_DAY_OF_WEEK_THURSDAY ((FIT_DAY_OF_WEEK)4) +#define FIT_DAY_OF_WEEK_FRIDAY ((FIT_DAY_OF_WEEK)5) +#define FIT_DAY_OF_WEEK_SATURDAY ((FIT_DAY_OF_WEEK)6) +#define FIT_DAY_OF_WEEK_COUNT 7 + +typedef FIT_UINT32Z FIT_CONNECTIVITY_CAPABILITIES; +#define FIT_CONNECTIVITY_CAPABILITIES_INVALID FIT_UINT32Z_INVALID +#define FIT_CONNECTIVITY_CAPABILITIES_BLUETOOTH ((FIT_CONNECTIVITY_CAPABILITIES)0x00000001) +#define FIT_CONNECTIVITY_CAPABILITIES_BLUETOOTH_LE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000002) +#define FIT_CONNECTIVITY_CAPABILITIES_ANT ((FIT_CONNECTIVITY_CAPABILITIES)0x00000004) +#define FIT_CONNECTIVITY_CAPABILITIES_ACTIVITY_UPLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000008) +#define FIT_CONNECTIVITY_CAPABILITIES_COURSE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000010) +#define FIT_CONNECTIVITY_CAPABILITIES_WORKOUT_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000020) +#define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK ((FIT_CONNECTIVITY_CAPABILITIES)0x00000040) +#define FIT_CONNECTIVITY_CAPABILITIES_WEATHER_CONDITIONS ((FIT_CONNECTIVITY_CAPABILITIES)0x00000080) +#define FIT_CONNECTIVITY_CAPABILITIES_WEATHER_ALERTS ((FIT_CONNECTIVITY_CAPABILITIES)0x00000100) +#define FIT_CONNECTIVITY_CAPABILITIES_GPS_EPHEMERIS_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000200) +#define FIT_CONNECTIVITY_CAPABILITIES_EXPLICIT_ARCHIVE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000400) +#define FIT_CONNECTIVITY_CAPABILITIES_SETUP_INCOMPLETE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000800) +#define FIT_CONNECTIVITY_CAPABILITIES_CONTINUE_SYNC_AFTER_SOFTWARE_UPDATE ((FIT_CONNECTIVITY_CAPABILITIES)0x00001000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_APP_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00002000) +#define FIT_CONNECTIVITY_CAPABILITIES_GOLF_COURSE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00004000) +#define FIT_CONNECTIVITY_CAPABILITIES_DEVICE_INITIATES_SYNC ((FIT_CONNECTIVITY_CAPABILITIES)0x00008000) // Indicates device is in control of initiating all syncs +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WATCH_APP_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00010000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WIDGET_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00020000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WATCH_FACE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00040000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_DATA_FIELD_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00080000) +#define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_APP_MANAGMENT ((FIT_CONNECTIVITY_CAPABILITIES)0x00100000) // Device supports delete and reorder of apps via GCM +#define FIT_CONNECTIVITY_CAPABILITIES_SWING_SENSOR ((FIT_CONNECTIVITY_CAPABILITIES)0x00200000) +#define FIT_CONNECTIVITY_CAPABILITIES_SWING_SENSOR_REMOTE ((FIT_CONNECTIVITY_CAPABILITIES)0x00400000) +#define FIT_CONNECTIVITY_CAPABILITIES_INCIDENT_DETECTION ((FIT_CONNECTIVITY_CAPABILITIES)0x00800000) // Device supports incident detection +#define FIT_CONNECTIVITY_CAPABILITIES_AUDIO_PROMPTS ((FIT_CONNECTIVITY_CAPABILITIES)0x01000000) +#define FIT_CONNECTIVITY_CAPABILITIES_WIFI_VERIFICATION ((FIT_CONNECTIVITY_CAPABILITIES)0x02000000) // Device supports reporting wifi verification via GCM +#define FIT_CONNECTIVITY_CAPABILITIES_TRUE_UP ((FIT_CONNECTIVITY_CAPABILITIES)0x04000000) // Device supports True Up +#define FIT_CONNECTIVITY_CAPABILITIES_FIND_MY_WATCH ((FIT_CONNECTIVITY_CAPABILITIES)0x08000000) // Device supports Find My Watch +#define FIT_CONNECTIVITY_CAPABILITIES_REMOTE_MANUAL_SYNC ((FIT_CONNECTIVITY_CAPABILITIES)0x10000000) +#define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK_AUTO_START ((FIT_CONNECTIVITY_CAPABILITIES)0x20000000) // Device supports LiveTrack auto start +#define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK_MESSAGING ((FIT_CONNECTIVITY_CAPABILITIES)0x40000000) // Device supports LiveTrack Messaging +#define FIT_CONNECTIVITY_CAPABILITIES_INSTANT_INPUT ((FIT_CONNECTIVITY_CAPABILITIES)0x80000000) // Device supports instant input feature +#define FIT_CONNECTIVITY_CAPABILITIES_COUNT 32 + +typedef FIT_ENUM FIT_WEATHER_REPORT; +#define FIT_WEATHER_REPORT_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_REPORT_CURRENT ((FIT_WEATHER_REPORT)0) +#define FIT_WEATHER_REPORT_FORECAST ((FIT_WEATHER_REPORT)1) // Deprecated use hourly_forecast instead +#define FIT_WEATHER_REPORT_HOURLY_FORECAST ((FIT_WEATHER_REPORT)1) +#define FIT_WEATHER_REPORT_DAILY_FORECAST ((FIT_WEATHER_REPORT)2) +#define FIT_WEATHER_REPORT_COUNT 4 + +typedef FIT_ENUM FIT_WEATHER_STATUS; +#define FIT_WEATHER_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_STATUS_CLEAR ((FIT_WEATHER_STATUS)0) +#define FIT_WEATHER_STATUS_PARTLY_CLOUDY ((FIT_WEATHER_STATUS)1) +#define FIT_WEATHER_STATUS_MOSTLY_CLOUDY ((FIT_WEATHER_STATUS)2) +#define FIT_WEATHER_STATUS_RAIN ((FIT_WEATHER_STATUS)3) +#define FIT_WEATHER_STATUS_SNOW ((FIT_WEATHER_STATUS)4) +#define FIT_WEATHER_STATUS_WINDY ((FIT_WEATHER_STATUS)5) +#define FIT_WEATHER_STATUS_THUNDERSTORMS ((FIT_WEATHER_STATUS)6) +#define FIT_WEATHER_STATUS_WINTRY_MIX ((FIT_WEATHER_STATUS)7) +#define FIT_WEATHER_STATUS_FOG ((FIT_WEATHER_STATUS)8) +#define FIT_WEATHER_STATUS_HAZY ((FIT_WEATHER_STATUS)11) +#define FIT_WEATHER_STATUS_HAIL ((FIT_WEATHER_STATUS)12) +#define FIT_WEATHER_STATUS_SCATTERED_SHOWERS ((FIT_WEATHER_STATUS)13) +#define FIT_WEATHER_STATUS_SCATTERED_THUNDERSTORMS ((FIT_WEATHER_STATUS)14) +#define FIT_WEATHER_STATUS_UNKNOWN_PRECIPITATION ((FIT_WEATHER_STATUS)15) +#define FIT_WEATHER_STATUS_LIGHT_RAIN ((FIT_WEATHER_STATUS)16) +#define FIT_WEATHER_STATUS_HEAVY_RAIN ((FIT_WEATHER_STATUS)17) +#define FIT_WEATHER_STATUS_LIGHT_SNOW ((FIT_WEATHER_STATUS)18) +#define FIT_WEATHER_STATUS_HEAVY_SNOW ((FIT_WEATHER_STATUS)19) +#define FIT_WEATHER_STATUS_LIGHT_RAIN_SNOW ((FIT_WEATHER_STATUS)20) +#define FIT_WEATHER_STATUS_HEAVY_RAIN_SNOW ((FIT_WEATHER_STATUS)21) +#define FIT_WEATHER_STATUS_CLOUDY ((FIT_WEATHER_STATUS)22) +#define FIT_WEATHER_STATUS_COUNT 21 + +typedef FIT_ENUM FIT_WEATHER_SEVERITY; +#define FIT_WEATHER_SEVERITY_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_SEVERITY_UNKNOWN ((FIT_WEATHER_SEVERITY)0) +#define FIT_WEATHER_SEVERITY_WARNING ((FIT_WEATHER_SEVERITY)1) +#define FIT_WEATHER_SEVERITY_WATCH ((FIT_WEATHER_SEVERITY)2) +#define FIT_WEATHER_SEVERITY_ADVISORY ((FIT_WEATHER_SEVERITY)3) +#define FIT_WEATHER_SEVERITY_STATEMENT ((FIT_WEATHER_SEVERITY)4) +#define FIT_WEATHER_SEVERITY_COUNT 5 + +typedef FIT_ENUM FIT_WEATHER_SEVERE_TYPE; +#define FIT_WEATHER_SEVERE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_WEATHER_SEVERE_TYPE_UNSPECIFIED ((FIT_WEATHER_SEVERE_TYPE)0) +#define FIT_WEATHER_SEVERE_TYPE_TORNADO ((FIT_WEATHER_SEVERE_TYPE)1) +#define FIT_WEATHER_SEVERE_TYPE_TSUNAMI ((FIT_WEATHER_SEVERE_TYPE)2) +#define FIT_WEATHER_SEVERE_TYPE_HURRICANE ((FIT_WEATHER_SEVERE_TYPE)3) +#define FIT_WEATHER_SEVERE_TYPE_EXTREME_WIND ((FIT_WEATHER_SEVERE_TYPE)4) +#define FIT_WEATHER_SEVERE_TYPE_TYPHOON ((FIT_WEATHER_SEVERE_TYPE)5) +#define FIT_WEATHER_SEVERE_TYPE_INLAND_HURRICANE ((FIT_WEATHER_SEVERE_TYPE)6) +#define FIT_WEATHER_SEVERE_TYPE_HURRICANE_FORCE_WIND ((FIT_WEATHER_SEVERE_TYPE)7) +#define FIT_WEATHER_SEVERE_TYPE_WATERSPOUT ((FIT_WEATHER_SEVERE_TYPE)8) +#define FIT_WEATHER_SEVERE_TYPE_SEVERE_THUNDERSTORM ((FIT_WEATHER_SEVERE_TYPE)9) +#define FIT_WEATHER_SEVERE_TYPE_WRECKHOUSE_WINDS ((FIT_WEATHER_SEVERE_TYPE)10) +#define FIT_WEATHER_SEVERE_TYPE_LES_SUETES_WIND ((FIT_WEATHER_SEVERE_TYPE)11) +#define FIT_WEATHER_SEVERE_TYPE_AVALANCHE ((FIT_WEATHER_SEVERE_TYPE)12) +#define FIT_WEATHER_SEVERE_TYPE_FLASH_FLOOD ((FIT_WEATHER_SEVERE_TYPE)13) +#define FIT_WEATHER_SEVERE_TYPE_TROPICAL_STORM ((FIT_WEATHER_SEVERE_TYPE)14) +#define FIT_WEATHER_SEVERE_TYPE_INLAND_TROPICAL_STORM ((FIT_WEATHER_SEVERE_TYPE)15) +#define FIT_WEATHER_SEVERE_TYPE_BLIZZARD ((FIT_WEATHER_SEVERE_TYPE)16) +#define FIT_WEATHER_SEVERE_TYPE_ICE_STORM ((FIT_WEATHER_SEVERE_TYPE)17) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_RAIN ((FIT_WEATHER_SEVERE_TYPE)18) +#define FIT_WEATHER_SEVERE_TYPE_DEBRIS_FLOW ((FIT_WEATHER_SEVERE_TYPE)19) +#define FIT_WEATHER_SEVERE_TYPE_FLASH_FREEZE ((FIT_WEATHER_SEVERE_TYPE)20) +#define FIT_WEATHER_SEVERE_TYPE_DUST_STORM ((FIT_WEATHER_SEVERE_TYPE)21) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_WIND ((FIT_WEATHER_SEVERE_TYPE)22) +#define FIT_WEATHER_SEVERE_TYPE_WINTER_STORM ((FIT_WEATHER_SEVERE_TYPE)23) +#define FIT_WEATHER_SEVERE_TYPE_HEAVY_FREEZING_SPRAY ((FIT_WEATHER_SEVERE_TYPE)24) +#define FIT_WEATHER_SEVERE_TYPE_EXTREME_COLD ((FIT_WEATHER_SEVERE_TYPE)25) +#define FIT_WEATHER_SEVERE_TYPE_WIND_CHILL ((FIT_WEATHER_SEVERE_TYPE)26) +#define FIT_WEATHER_SEVERE_TYPE_COLD_WAVE ((FIT_WEATHER_SEVERE_TYPE)27) +#define FIT_WEATHER_SEVERE_TYPE_HEAVY_SNOW_ALERT ((FIT_WEATHER_SEVERE_TYPE)28) +#define FIT_WEATHER_SEVERE_TYPE_LAKE_EFFECT_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)29) +#define FIT_WEATHER_SEVERE_TYPE_SNOW_SQUALL ((FIT_WEATHER_SEVERE_TYPE)30) +#define FIT_WEATHER_SEVERE_TYPE_LAKE_EFFECT_SNOW ((FIT_WEATHER_SEVERE_TYPE)31) +#define FIT_WEATHER_SEVERE_TYPE_WINTER_WEATHER ((FIT_WEATHER_SEVERE_TYPE)32) +#define FIT_WEATHER_SEVERE_TYPE_SLEET ((FIT_WEATHER_SEVERE_TYPE)33) +#define FIT_WEATHER_SEVERE_TYPE_SNOWFALL ((FIT_WEATHER_SEVERE_TYPE)34) +#define FIT_WEATHER_SEVERE_TYPE_SNOW_AND_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)35) +#define FIT_WEATHER_SEVERE_TYPE_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)36) +#define FIT_WEATHER_SEVERE_TYPE_SNOW_ALERT ((FIT_WEATHER_SEVERE_TYPE)37) +#define FIT_WEATHER_SEVERE_TYPE_ARCTIC_OUTFLOW ((FIT_WEATHER_SEVERE_TYPE)38) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_DRIZZLE ((FIT_WEATHER_SEVERE_TYPE)39) +#define FIT_WEATHER_SEVERE_TYPE_STORM ((FIT_WEATHER_SEVERE_TYPE)40) +#define FIT_WEATHER_SEVERE_TYPE_STORM_SURGE ((FIT_WEATHER_SEVERE_TYPE)41) +#define FIT_WEATHER_SEVERE_TYPE_RAINFALL ((FIT_WEATHER_SEVERE_TYPE)42) +#define FIT_WEATHER_SEVERE_TYPE_AREAL_FLOOD ((FIT_WEATHER_SEVERE_TYPE)43) +#define FIT_WEATHER_SEVERE_TYPE_COASTAL_FLOOD ((FIT_WEATHER_SEVERE_TYPE)44) +#define FIT_WEATHER_SEVERE_TYPE_LAKESHORE_FLOOD ((FIT_WEATHER_SEVERE_TYPE)45) +#define FIT_WEATHER_SEVERE_TYPE_EXCESSIVE_HEAT ((FIT_WEATHER_SEVERE_TYPE)46) +#define FIT_WEATHER_SEVERE_TYPE_HEAT ((FIT_WEATHER_SEVERE_TYPE)47) +#define FIT_WEATHER_SEVERE_TYPE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)48) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_HEAT_AND_HUMIDITY ((FIT_WEATHER_SEVERE_TYPE)49) +#define FIT_WEATHER_SEVERE_TYPE_HUMIDEX_AND_HEALTH ((FIT_WEATHER_SEVERE_TYPE)50) +#define FIT_WEATHER_SEVERE_TYPE_HUMIDEX ((FIT_WEATHER_SEVERE_TYPE)51) +#define FIT_WEATHER_SEVERE_TYPE_GALE ((FIT_WEATHER_SEVERE_TYPE)52) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_SPRAY ((FIT_WEATHER_SEVERE_TYPE)53) +#define FIT_WEATHER_SEVERE_TYPE_SPECIAL_MARINE ((FIT_WEATHER_SEVERE_TYPE)54) +#define FIT_WEATHER_SEVERE_TYPE_SQUALL ((FIT_WEATHER_SEVERE_TYPE)55) +#define FIT_WEATHER_SEVERE_TYPE_STRONG_WIND ((FIT_WEATHER_SEVERE_TYPE)56) +#define FIT_WEATHER_SEVERE_TYPE_LAKE_WIND ((FIT_WEATHER_SEVERE_TYPE)57) +#define FIT_WEATHER_SEVERE_TYPE_MARINE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)58) +#define FIT_WEATHER_SEVERE_TYPE_WIND ((FIT_WEATHER_SEVERE_TYPE)59) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_HAZARDOUS_SEAS ((FIT_WEATHER_SEVERE_TYPE)60) +#define FIT_WEATHER_SEVERE_TYPE_HAZARDOUS_SEAS ((FIT_WEATHER_SEVERE_TYPE)61) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT ((FIT_WEATHER_SEVERE_TYPE)62) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_WINDS ((FIT_WEATHER_SEVERE_TYPE)63) +#define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_ROUGH_BAR ((FIT_WEATHER_SEVERE_TYPE)64) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_WATER_LEVEL ((FIT_WEATHER_SEVERE_TYPE)65) +#define FIT_WEATHER_SEVERE_TYPE_ASHFALL ((FIT_WEATHER_SEVERE_TYPE)66) +#define FIT_WEATHER_SEVERE_TYPE_FREEZING_FOG ((FIT_WEATHER_SEVERE_TYPE)67) +#define FIT_WEATHER_SEVERE_TYPE_DENSE_FOG ((FIT_WEATHER_SEVERE_TYPE)68) +#define FIT_WEATHER_SEVERE_TYPE_DENSE_SMOKE ((FIT_WEATHER_SEVERE_TYPE)69) +#define FIT_WEATHER_SEVERE_TYPE_BLOWING_DUST ((FIT_WEATHER_SEVERE_TYPE)70) +#define FIT_WEATHER_SEVERE_TYPE_HARD_FREEZE ((FIT_WEATHER_SEVERE_TYPE)71) +#define FIT_WEATHER_SEVERE_TYPE_FREEZE ((FIT_WEATHER_SEVERE_TYPE)72) +#define FIT_WEATHER_SEVERE_TYPE_FROST ((FIT_WEATHER_SEVERE_TYPE)73) +#define FIT_WEATHER_SEVERE_TYPE_FIRE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)74) +#define FIT_WEATHER_SEVERE_TYPE_FLOOD ((FIT_WEATHER_SEVERE_TYPE)75) +#define FIT_WEATHER_SEVERE_TYPE_RIP_TIDE ((FIT_WEATHER_SEVERE_TYPE)76) +#define FIT_WEATHER_SEVERE_TYPE_HIGH_SURF ((FIT_WEATHER_SEVERE_TYPE)77) +#define FIT_WEATHER_SEVERE_TYPE_SMOG ((FIT_WEATHER_SEVERE_TYPE)78) +#define FIT_WEATHER_SEVERE_TYPE_AIR_QUALITY ((FIT_WEATHER_SEVERE_TYPE)79) +#define FIT_WEATHER_SEVERE_TYPE_BRISK_WIND ((FIT_WEATHER_SEVERE_TYPE)80) +#define FIT_WEATHER_SEVERE_TYPE_AIR_STAGNATION ((FIT_WEATHER_SEVERE_TYPE)81) +#define FIT_WEATHER_SEVERE_TYPE_LOW_WATER ((FIT_WEATHER_SEVERE_TYPE)82) +#define FIT_WEATHER_SEVERE_TYPE_HYDROLOGICAL ((FIT_WEATHER_SEVERE_TYPE)83) +#define FIT_WEATHER_SEVERE_TYPE_SPECIAL_WEATHER ((FIT_WEATHER_SEVERE_TYPE)84) +#define FIT_WEATHER_SEVERE_TYPE_COUNT 85 + +typedef FIT_UINT32 FIT_TIME_INTO_DAY; // number of seconds into the day since 00:00:00 UTC +#define FIT_TIME_INTO_DAY_INVALID FIT_UINT32_INVALID +#define FIT_TIME_INTO_DAY_COUNT 0 + +typedef FIT_UINT32 FIT_LOCALTIME_INTO_DAY; // number of seconds into the day since local 00:00:00 +#define FIT_LOCALTIME_INTO_DAY_INVALID FIT_UINT32_INVALID +#define FIT_LOCALTIME_INTO_DAY_COUNT 0 + +typedef FIT_ENUM FIT_STROKE_TYPE; +#define FIT_STROKE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_STROKE_TYPE_NO_EVENT ((FIT_STROKE_TYPE)0) +#define FIT_STROKE_TYPE_OTHER ((FIT_STROKE_TYPE)1) // stroke was detected but cannot be identified +#define FIT_STROKE_TYPE_SERVE ((FIT_STROKE_TYPE)2) +#define FIT_STROKE_TYPE_FOREHAND ((FIT_STROKE_TYPE)3) +#define FIT_STROKE_TYPE_BACKHAND ((FIT_STROKE_TYPE)4) +#define FIT_STROKE_TYPE_SMASH ((FIT_STROKE_TYPE)5) +#define FIT_STROKE_TYPE_COUNT 6 + +typedef FIT_ENUM FIT_BODY_LOCATION; +#define FIT_BODY_LOCATION_INVALID FIT_ENUM_INVALID +#define FIT_BODY_LOCATION_LEFT_LEG ((FIT_BODY_LOCATION)0) +#define FIT_BODY_LOCATION_LEFT_CALF ((FIT_BODY_LOCATION)1) +#define FIT_BODY_LOCATION_LEFT_SHIN ((FIT_BODY_LOCATION)2) +#define FIT_BODY_LOCATION_LEFT_HAMSTRING ((FIT_BODY_LOCATION)3) +#define FIT_BODY_LOCATION_LEFT_QUAD ((FIT_BODY_LOCATION)4) +#define FIT_BODY_LOCATION_LEFT_GLUTE ((FIT_BODY_LOCATION)5) +#define FIT_BODY_LOCATION_RIGHT_LEG ((FIT_BODY_LOCATION)6) +#define FIT_BODY_LOCATION_RIGHT_CALF ((FIT_BODY_LOCATION)7) +#define FIT_BODY_LOCATION_RIGHT_SHIN ((FIT_BODY_LOCATION)8) +#define FIT_BODY_LOCATION_RIGHT_HAMSTRING ((FIT_BODY_LOCATION)9) +#define FIT_BODY_LOCATION_RIGHT_QUAD ((FIT_BODY_LOCATION)10) +#define FIT_BODY_LOCATION_RIGHT_GLUTE ((FIT_BODY_LOCATION)11) +#define FIT_BODY_LOCATION_TORSO_BACK ((FIT_BODY_LOCATION)12) +#define FIT_BODY_LOCATION_LEFT_LOWER_BACK ((FIT_BODY_LOCATION)13) +#define FIT_BODY_LOCATION_LEFT_UPPER_BACK ((FIT_BODY_LOCATION)14) +#define FIT_BODY_LOCATION_RIGHT_LOWER_BACK ((FIT_BODY_LOCATION)15) +#define FIT_BODY_LOCATION_RIGHT_UPPER_BACK ((FIT_BODY_LOCATION)16) +#define FIT_BODY_LOCATION_TORSO_FRONT ((FIT_BODY_LOCATION)17) +#define FIT_BODY_LOCATION_LEFT_ABDOMEN ((FIT_BODY_LOCATION)18) +#define FIT_BODY_LOCATION_LEFT_CHEST ((FIT_BODY_LOCATION)19) +#define FIT_BODY_LOCATION_RIGHT_ABDOMEN ((FIT_BODY_LOCATION)20) +#define FIT_BODY_LOCATION_RIGHT_CHEST ((FIT_BODY_LOCATION)21) +#define FIT_BODY_LOCATION_LEFT_ARM ((FIT_BODY_LOCATION)22) +#define FIT_BODY_LOCATION_LEFT_SHOULDER ((FIT_BODY_LOCATION)23) +#define FIT_BODY_LOCATION_LEFT_BICEP ((FIT_BODY_LOCATION)24) +#define FIT_BODY_LOCATION_LEFT_TRICEP ((FIT_BODY_LOCATION)25) +#define FIT_BODY_LOCATION_LEFT_BRACHIORADIALIS ((FIT_BODY_LOCATION)26) // Left anterior forearm +#define FIT_BODY_LOCATION_LEFT_FOREARM_EXTENSORS ((FIT_BODY_LOCATION)27) // Left posterior forearm +#define FIT_BODY_LOCATION_RIGHT_ARM ((FIT_BODY_LOCATION)28) +#define FIT_BODY_LOCATION_RIGHT_SHOULDER ((FIT_BODY_LOCATION)29) +#define FIT_BODY_LOCATION_RIGHT_BICEP ((FIT_BODY_LOCATION)30) +#define FIT_BODY_LOCATION_RIGHT_TRICEP ((FIT_BODY_LOCATION)31) +#define FIT_BODY_LOCATION_RIGHT_BRACHIORADIALIS ((FIT_BODY_LOCATION)32) // Right anterior forearm +#define FIT_BODY_LOCATION_RIGHT_FOREARM_EXTENSORS ((FIT_BODY_LOCATION)33) // Right posterior forearm +#define FIT_BODY_LOCATION_NECK ((FIT_BODY_LOCATION)34) +#define FIT_BODY_LOCATION_THROAT ((FIT_BODY_LOCATION)35) +#define FIT_BODY_LOCATION_WAIST_MID_BACK ((FIT_BODY_LOCATION)36) +#define FIT_BODY_LOCATION_WAIST_FRONT ((FIT_BODY_LOCATION)37) +#define FIT_BODY_LOCATION_WAIST_LEFT ((FIT_BODY_LOCATION)38) +#define FIT_BODY_LOCATION_WAIST_RIGHT ((FIT_BODY_LOCATION)39) +#define FIT_BODY_LOCATION_COUNT 40 + +typedef FIT_ENUM FIT_SEGMENT_LAP_STATUS; +#define FIT_SEGMENT_LAP_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_LAP_STATUS_END ((FIT_SEGMENT_LAP_STATUS)0) +#define FIT_SEGMENT_LAP_STATUS_FAIL ((FIT_SEGMENT_LAP_STATUS)1) +#define FIT_SEGMENT_LAP_STATUS_COUNT 2 + +typedef FIT_ENUM FIT_SEGMENT_LEADERBOARD_TYPE; +#define FIT_SEGMENT_LEADERBOARD_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_LEADERBOARD_TYPE_OVERALL ((FIT_SEGMENT_LEADERBOARD_TYPE)0) +#define FIT_SEGMENT_LEADERBOARD_TYPE_PERSONAL_BEST ((FIT_SEGMENT_LEADERBOARD_TYPE)1) +#define FIT_SEGMENT_LEADERBOARD_TYPE_CONNECTIONS ((FIT_SEGMENT_LEADERBOARD_TYPE)2) +#define FIT_SEGMENT_LEADERBOARD_TYPE_GROUP ((FIT_SEGMENT_LEADERBOARD_TYPE)3) +#define FIT_SEGMENT_LEADERBOARD_TYPE_CHALLENGER ((FIT_SEGMENT_LEADERBOARD_TYPE)4) +#define FIT_SEGMENT_LEADERBOARD_TYPE_KOM ((FIT_SEGMENT_LEADERBOARD_TYPE)5) +#define FIT_SEGMENT_LEADERBOARD_TYPE_QOM ((FIT_SEGMENT_LEADERBOARD_TYPE)6) +#define FIT_SEGMENT_LEADERBOARD_TYPE_PR ((FIT_SEGMENT_LEADERBOARD_TYPE)7) +#define FIT_SEGMENT_LEADERBOARD_TYPE_GOAL ((FIT_SEGMENT_LEADERBOARD_TYPE)8) +#define FIT_SEGMENT_LEADERBOARD_TYPE_RIVAL ((FIT_SEGMENT_LEADERBOARD_TYPE)9) +#define FIT_SEGMENT_LEADERBOARD_TYPE_CLUB_LEADER ((FIT_SEGMENT_LEADERBOARD_TYPE)10) +#define FIT_SEGMENT_LEADERBOARD_TYPE_COUNT 11 + +typedef FIT_ENUM FIT_SEGMENT_DELETE_STATUS; +#define FIT_SEGMENT_DELETE_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_DELETE_STATUS_DO_NOT_DELETE ((FIT_SEGMENT_DELETE_STATUS)0) +#define FIT_SEGMENT_DELETE_STATUS_DELETE_ONE ((FIT_SEGMENT_DELETE_STATUS)1) +#define FIT_SEGMENT_DELETE_STATUS_DELETE_ALL ((FIT_SEGMENT_DELETE_STATUS)2) +#define FIT_SEGMENT_DELETE_STATUS_COUNT 3 + +typedef FIT_ENUM FIT_SEGMENT_SELECTION_TYPE; +#define FIT_SEGMENT_SELECTION_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SEGMENT_SELECTION_TYPE_STARRED ((FIT_SEGMENT_SELECTION_TYPE)0) +#define FIT_SEGMENT_SELECTION_TYPE_SUGGESTED ((FIT_SEGMENT_SELECTION_TYPE)1) +#define FIT_SEGMENT_SELECTION_TYPE_COUNT 2 + +typedef FIT_ENUM FIT_SOURCE_TYPE; +#define FIT_SOURCE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SOURCE_TYPE_ANT ((FIT_SOURCE_TYPE)0) // External device connected with ANT +#define FIT_SOURCE_TYPE_ANTPLUS ((FIT_SOURCE_TYPE)1) // External device connected with ANT+ +#define FIT_SOURCE_TYPE_BLUETOOTH ((FIT_SOURCE_TYPE)2) // External device connected with BT +#define FIT_SOURCE_TYPE_BLUETOOTH_LOW_ENERGY ((FIT_SOURCE_TYPE)3) // External device connected with BLE +#define FIT_SOURCE_TYPE_WIFI ((FIT_SOURCE_TYPE)4) // External device connected with Wifi +#define FIT_SOURCE_TYPE_LOCAL ((FIT_SOURCE_TYPE)5) // Onboard device +#define FIT_SOURCE_TYPE_COUNT 6 + +typedef FIT_UINT8 FIT_LOCAL_DEVICE_TYPE; +#define FIT_LOCAL_DEVICE_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_LOCAL_DEVICE_TYPE_COUNT 0 + +typedef FIT_ENUM FIT_DISPLAY_ORIENTATION; +#define FIT_DISPLAY_ORIENTATION_INVALID FIT_ENUM_INVALID +#define FIT_DISPLAY_ORIENTATION_AUTO ((FIT_DISPLAY_ORIENTATION)0) // automatic if the device supports it +#define FIT_DISPLAY_ORIENTATION_PORTRAIT ((FIT_DISPLAY_ORIENTATION)1) +#define FIT_DISPLAY_ORIENTATION_LANDSCAPE ((FIT_DISPLAY_ORIENTATION)2) +#define FIT_DISPLAY_ORIENTATION_PORTRAIT_FLIPPED ((FIT_DISPLAY_ORIENTATION)3) // portrait mode but rotated 180 degrees +#define FIT_DISPLAY_ORIENTATION_LANDSCAPE_FLIPPED ((FIT_DISPLAY_ORIENTATION)4) // landscape mode but rotated 180 degrees +#define FIT_DISPLAY_ORIENTATION_COUNT 5 + +typedef FIT_ENUM FIT_WORKOUT_EQUIPMENT; +#define FIT_WORKOUT_EQUIPMENT_INVALID FIT_ENUM_INVALID +#define FIT_WORKOUT_EQUIPMENT_NONE ((FIT_WORKOUT_EQUIPMENT)0) +#define FIT_WORKOUT_EQUIPMENT_SWIM_FINS ((FIT_WORKOUT_EQUIPMENT)1) +#define FIT_WORKOUT_EQUIPMENT_SWIM_KICKBOARD ((FIT_WORKOUT_EQUIPMENT)2) +#define FIT_WORKOUT_EQUIPMENT_SWIM_PADDLES ((FIT_WORKOUT_EQUIPMENT)3) +#define FIT_WORKOUT_EQUIPMENT_SWIM_PULL_BUOY ((FIT_WORKOUT_EQUIPMENT)4) +#define FIT_WORKOUT_EQUIPMENT_SWIM_SNORKEL ((FIT_WORKOUT_EQUIPMENT)5) +#define FIT_WORKOUT_EQUIPMENT_COUNT 6 + +typedef FIT_ENUM FIT_WATCHFACE_MODE; +#define FIT_WATCHFACE_MODE_INVALID FIT_ENUM_INVALID +#define FIT_WATCHFACE_MODE_DIGITAL ((FIT_WATCHFACE_MODE)0) +#define FIT_WATCHFACE_MODE_ANALOG ((FIT_WATCHFACE_MODE)1) +#define FIT_WATCHFACE_MODE_CONNECT_IQ ((FIT_WATCHFACE_MODE)2) +#define FIT_WATCHFACE_MODE_DISABLED ((FIT_WATCHFACE_MODE)3) +#define FIT_WATCHFACE_MODE_COUNT 4 + +typedef FIT_ENUM FIT_DIGITAL_WATCHFACE_LAYOUT; +#define FIT_DIGITAL_WATCHFACE_LAYOUT_INVALID FIT_ENUM_INVALID +#define FIT_DIGITAL_WATCHFACE_LAYOUT_TRADITIONAL ((FIT_DIGITAL_WATCHFACE_LAYOUT)0) +#define FIT_DIGITAL_WATCHFACE_LAYOUT_MODERN ((FIT_DIGITAL_WATCHFACE_LAYOUT)1) +#define FIT_DIGITAL_WATCHFACE_LAYOUT_BOLD ((FIT_DIGITAL_WATCHFACE_LAYOUT)2) +#define FIT_DIGITAL_WATCHFACE_LAYOUT_COUNT 3 + +typedef FIT_ENUM FIT_ANALOG_WATCHFACE_LAYOUT; +#define FIT_ANALOG_WATCHFACE_LAYOUT_INVALID FIT_ENUM_INVALID +#define FIT_ANALOG_WATCHFACE_LAYOUT_MINIMAL ((FIT_ANALOG_WATCHFACE_LAYOUT)0) +#define FIT_ANALOG_WATCHFACE_LAYOUT_TRADITIONAL ((FIT_ANALOG_WATCHFACE_LAYOUT)1) +#define FIT_ANALOG_WATCHFACE_LAYOUT_MODERN ((FIT_ANALOG_WATCHFACE_LAYOUT)2) +#define FIT_ANALOG_WATCHFACE_LAYOUT_COUNT 3 + +typedef FIT_ENUM FIT_RIDER_POSITION_TYPE; +#define FIT_RIDER_POSITION_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_RIDER_POSITION_TYPE_SEATED ((FIT_RIDER_POSITION_TYPE)0) +#define FIT_RIDER_POSITION_TYPE_STANDING ((FIT_RIDER_POSITION_TYPE)1) +#define FIT_RIDER_POSITION_TYPE_TRANSITION_TO_SEATED ((FIT_RIDER_POSITION_TYPE)2) +#define FIT_RIDER_POSITION_TYPE_TRANSITION_TO_STANDING ((FIT_RIDER_POSITION_TYPE)3) +#define FIT_RIDER_POSITION_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_POWER_PHASE_TYPE; +#define FIT_POWER_PHASE_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_START_ANGLE ((FIT_POWER_PHASE_TYPE)0) +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_END_ANGLE ((FIT_POWER_PHASE_TYPE)1) +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_ARC_LENGTH ((FIT_POWER_PHASE_TYPE)2) +#define FIT_POWER_PHASE_TYPE_POWER_PHASE_CENTER ((FIT_POWER_PHASE_TYPE)3) +#define FIT_POWER_PHASE_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_CAMERA_EVENT_TYPE; +#define FIT_CAMERA_EVENT_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_CAMERA_EVENT_TYPE_VIDEO_START ((FIT_CAMERA_EVENT_TYPE)0) // Start of video recording +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SPLIT ((FIT_CAMERA_EVENT_TYPE)1) // Mark of video file split (end of one file, beginning of the other) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_END ((FIT_CAMERA_EVENT_TYPE)2) // End of video recording +#define FIT_CAMERA_EVENT_TYPE_PHOTO_TAKEN ((FIT_CAMERA_EVENT_TYPE)3) // Still photo taken +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_START ((FIT_CAMERA_EVENT_TYPE)4) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_SPLIT ((FIT_CAMERA_EVENT_TYPE)5) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_END ((FIT_CAMERA_EVENT_TYPE)6) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SPLIT_START ((FIT_CAMERA_EVENT_TYPE)7) // Mark of video file split start +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_SPLIT_START ((FIT_CAMERA_EVENT_TYPE)8) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_PAUSE ((FIT_CAMERA_EVENT_TYPE)11) // Mark when a video recording has been paused +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_PAUSE ((FIT_CAMERA_EVENT_TYPE)12) +#define FIT_CAMERA_EVENT_TYPE_VIDEO_RESUME ((FIT_CAMERA_EVENT_TYPE)13) // Mark when a video recording has been resumed +#define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_RESUME ((FIT_CAMERA_EVENT_TYPE)14) +#define FIT_CAMERA_EVENT_TYPE_COUNT 13 + +typedef FIT_ENUM FIT_SENSOR_TYPE; +#define FIT_SENSOR_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_SENSOR_TYPE_ACCELEROMETER ((FIT_SENSOR_TYPE)0) +#define FIT_SENSOR_TYPE_GYROSCOPE ((FIT_SENSOR_TYPE)1) +#define FIT_SENSOR_TYPE_COMPASS ((FIT_SENSOR_TYPE)2) // Magnetometer +#define FIT_SENSOR_TYPE_BAROMETER ((FIT_SENSOR_TYPE)3) +#define FIT_SENSOR_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE; +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_AUTO ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)0) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_INDIVIDUAL ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)4) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_HIGH_VISIBILITY ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)5) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_TRAIL ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)6) +#define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_COUNT 4 + +typedef FIT_UINT16 FIT_COMM_TIMEOUT_TYPE; +#define FIT_COMM_TIMEOUT_TYPE_INVALID FIT_UINT16_INVALID +#define FIT_COMM_TIMEOUT_TYPE_WILDCARD_PAIRING_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)0) // Timeout pairing to any device +#define FIT_COMM_TIMEOUT_TYPE_PAIRING_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)1) // Timeout pairing to previously paired device +#define FIT_COMM_TIMEOUT_TYPE_CONNECTION_LOST ((FIT_COMM_TIMEOUT_TYPE)2) // Temporary loss of communications +#define FIT_COMM_TIMEOUT_TYPE_CONNECTION_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)3) // Connection closed due to extended bad communications +#define FIT_COMM_TIMEOUT_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_CAMERA_ORIENTATION_TYPE; +#define FIT_CAMERA_ORIENTATION_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_0 ((FIT_CAMERA_ORIENTATION_TYPE)0) +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_90 ((FIT_CAMERA_ORIENTATION_TYPE)1) +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_180 ((FIT_CAMERA_ORIENTATION_TYPE)2) +#define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_270 ((FIT_CAMERA_ORIENTATION_TYPE)3) +#define FIT_CAMERA_ORIENTATION_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_ATTITUDE_STAGE; +#define FIT_ATTITUDE_STAGE_INVALID FIT_ENUM_INVALID +#define FIT_ATTITUDE_STAGE_FAILED ((FIT_ATTITUDE_STAGE)0) +#define FIT_ATTITUDE_STAGE_ALIGNING ((FIT_ATTITUDE_STAGE)1) +#define FIT_ATTITUDE_STAGE_DEGRADED ((FIT_ATTITUDE_STAGE)2) +#define FIT_ATTITUDE_STAGE_VALID ((FIT_ATTITUDE_STAGE)3) +#define FIT_ATTITUDE_STAGE_COUNT 4 + +typedef FIT_UINT16 FIT_ATTITUDE_VALIDITY; +#define FIT_ATTITUDE_VALIDITY_INVALID FIT_UINT16_INVALID +#define FIT_ATTITUDE_VALIDITY_TRACK_ANGLE_HEADING_VALID ((FIT_ATTITUDE_VALIDITY)0x0001) +#define FIT_ATTITUDE_VALIDITY_PITCH_VALID ((FIT_ATTITUDE_VALIDITY)0x0002) +#define FIT_ATTITUDE_VALIDITY_ROLL_VALID ((FIT_ATTITUDE_VALIDITY)0x0004) +#define FIT_ATTITUDE_VALIDITY_LATERAL_BODY_ACCEL_VALID ((FIT_ATTITUDE_VALIDITY)0x0008) +#define FIT_ATTITUDE_VALIDITY_NORMAL_BODY_ACCEL_VALID ((FIT_ATTITUDE_VALIDITY)0x0010) +#define FIT_ATTITUDE_VALIDITY_TURN_RATE_VALID ((FIT_ATTITUDE_VALIDITY)0x0020) +#define FIT_ATTITUDE_VALIDITY_HW_FAIL ((FIT_ATTITUDE_VALIDITY)0x0040) +#define FIT_ATTITUDE_VALIDITY_MAG_INVALID ((FIT_ATTITUDE_VALIDITY)0x0080) +#define FIT_ATTITUDE_VALIDITY_NO_GPS ((FIT_ATTITUDE_VALIDITY)0x0100) +#define FIT_ATTITUDE_VALIDITY_GPS_INVALID ((FIT_ATTITUDE_VALIDITY)0x0200) +#define FIT_ATTITUDE_VALIDITY_SOLUTION_COASTING ((FIT_ATTITUDE_VALIDITY)0x0400) +#define FIT_ATTITUDE_VALIDITY_TRUE_TRACK_ANGLE ((FIT_ATTITUDE_VALIDITY)0x0800) +#define FIT_ATTITUDE_VALIDITY_MAGNETIC_HEADING ((FIT_ATTITUDE_VALIDITY)0x1000) +#define FIT_ATTITUDE_VALIDITY_COUNT 13 + +typedef FIT_ENUM FIT_AUTO_SYNC_FREQUENCY; +#define FIT_AUTO_SYNC_FREQUENCY_INVALID FIT_ENUM_INVALID +#define FIT_AUTO_SYNC_FREQUENCY_NEVER ((FIT_AUTO_SYNC_FREQUENCY)0) +#define FIT_AUTO_SYNC_FREQUENCY_OCCASIONALLY ((FIT_AUTO_SYNC_FREQUENCY)1) +#define FIT_AUTO_SYNC_FREQUENCY_FREQUENT ((FIT_AUTO_SYNC_FREQUENCY)2) +#define FIT_AUTO_SYNC_FREQUENCY_ONCE_A_DAY ((FIT_AUTO_SYNC_FREQUENCY)3) +#define FIT_AUTO_SYNC_FREQUENCY_REMOTE ((FIT_AUTO_SYNC_FREQUENCY)4) +#define FIT_AUTO_SYNC_FREQUENCY_COUNT 5 + +typedef FIT_ENUM FIT_EXD_LAYOUT; +#define FIT_EXD_LAYOUT_INVALID FIT_ENUM_INVALID +#define FIT_EXD_LAYOUT_FULL_SCREEN ((FIT_EXD_LAYOUT)0) +#define FIT_EXD_LAYOUT_HALF_VERTICAL ((FIT_EXD_LAYOUT)1) +#define FIT_EXD_LAYOUT_HALF_HORIZONTAL ((FIT_EXD_LAYOUT)2) +#define FIT_EXD_LAYOUT_HALF_VERTICAL_RIGHT_SPLIT ((FIT_EXD_LAYOUT)3) +#define FIT_EXD_LAYOUT_HALF_HORIZONTAL_BOTTOM_SPLIT ((FIT_EXD_LAYOUT)4) +#define FIT_EXD_LAYOUT_FULL_QUARTER_SPLIT ((FIT_EXD_LAYOUT)5) +#define FIT_EXD_LAYOUT_HALF_VERTICAL_LEFT_SPLIT ((FIT_EXD_LAYOUT)6) +#define FIT_EXD_LAYOUT_HALF_HORIZONTAL_TOP_SPLIT ((FIT_EXD_LAYOUT)7) +#define FIT_EXD_LAYOUT_DYNAMIC ((FIT_EXD_LAYOUT)8) // The EXD may display the configured concepts in any layout it sees fit. +#define FIT_EXD_LAYOUT_COUNT 9 + +typedef FIT_ENUM FIT_EXD_DISPLAY_TYPE; +#define FIT_EXD_DISPLAY_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_EXD_DISPLAY_TYPE_NUMERICAL ((FIT_EXD_DISPLAY_TYPE)0) +#define FIT_EXD_DISPLAY_TYPE_SIMPLE ((FIT_EXD_DISPLAY_TYPE)1) +#define FIT_EXD_DISPLAY_TYPE_GRAPH ((FIT_EXD_DISPLAY_TYPE)2) +#define FIT_EXD_DISPLAY_TYPE_BAR ((FIT_EXD_DISPLAY_TYPE)3) +#define FIT_EXD_DISPLAY_TYPE_CIRCLE_GRAPH ((FIT_EXD_DISPLAY_TYPE)4) +#define FIT_EXD_DISPLAY_TYPE_VIRTUAL_PARTNER ((FIT_EXD_DISPLAY_TYPE)5) +#define FIT_EXD_DISPLAY_TYPE_BALANCE ((FIT_EXD_DISPLAY_TYPE)6) +#define FIT_EXD_DISPLAY_TYPE_STRING_LIST ((FIT_EXD_DISPLAY_TYPE)7) +#define FIT_EXD_DISPLAY_TYPE_STRING ((FIT_EXD_DISPLAY_TYPE)8) +#define FIT_EXD_DISPLAY_TYPE_SIMPLE_DYNAMIC_ICON ((FIT_EXD_DISPLAY_TYPE)9) +#define FIT_EXD_DISPLAY_TYPE_GAUGE ((FIT_EXD_DISPLAY_TYPE)10) +#define FIT_EXD_DISPLAY_TYPE_COUNT 11 + +typedef FIT_ENUM FIT_EXD_DATA_UNITS; +#define FIT_EXD_DATA_UNITS_INVALID FIT_ENUM_INVALID +#define FIT_EXD_DATA_UNITS_NO_UNITS ((FIT_EXD_DATA_UNITS)0) +#define FIT_EXD_DATA_UNITS_LAPS ((FIT_EXD_DATA_UNITS)1) +#define FIT_EXD_DATA_UNITS_MILES_PER_HOUR ((FIT_EXD_DATA_UNITS)2) +#define FIT_EXD_DATA_UNITS_KILOMETERS_PER_HOUR ((FIT_EXD_DATA_UNITS)3) +#define FIT_EXD_DATA_UNITS_FEET_PER_HOUR ((FIT_EXD_DATA_UNITS)4) +#define FIT_EXD_DATA_UNITS_METERS_PER_HOUR ((FIT_EXD_DATA_UNITS)5) +#define FIT_EXD_DATA_UNITS_DEGREES_CELSIUS ((FIT_EXD_DATA_UNITS)6) +#define FIT_EXD_DATA_UNITS_DEGREES_FARENHEIT ((FIT_EXD_DATA_UNITS)7) +#define FIT_EXD_DATA_UNITS_ZONE ((FIT_EXD_DATA_UNITS)8) +#define FIT_EXD_DATA_UNITS_GEAR ((FIT_EXD_DATA_UNITS)9) +#define FIT_EXD_DATA_UNITS_RPM ((FIT_EXD_DATA_UNITS)10) +#define FIT_EXD_DATA_UNITS_BPM ((FIT_EXD_DATA_UNITS)11) +#define FIT_EXD_DATA_UNITS_DEGREES ((FIT_EXD_DATA_UNITS)12) +#define FIT_EXD_DATA_UNITS_MILLIMETERS ((FIT_EXD_DATA_UNITS)13) +#define FIT_EXD_DATA_UNITS_METERS ((FIT_EXD_DATA_UNITS)14) +#define FIT_EXD_DATA_UNITS_KILOMETERS ((FIT_EXD_DATA_UNITS)15) +#define FIT_EXD_DATA_UNITS_FEET ((FIT_EXD_DATA_UNITS)16) +#define FIT_EXD_DATA_UNITS_YARDS ((FIT_EXD_DATA_UNITS)17) +#define FIT_EXD_DATA_UNITS_KILOFEET ((FIT_EXD_DATA_UNITS)18) +#define FIT_EXD_DATA_UNITS_MILES ((FIT_EXD_DATA_UNITS)19) +#define FIT_EXD_DATA_UNITS_TIME ((FIT_EXD_DATA_UNITS)20) +#define FIT_EXD_DATA_UNITS_ENUM_TURN_TYPE ((FIT_EXD_DATA_UNITS)21) +#define FIT_EXD_DATA_UNITS_PERCENT ((FIT_EXD_DATA_UNITS)22) +#define FIT_EXD_DATA_UNITS_WATTS ((FIT_EXD_DATA_UNITS)23) +#define FIT_EXD_DATA_UNITS_WATTS_PER_KILOGRAM ((FIT_EXD_DATA_UNITS)24) +#define FIT_EXD_DATA_UNITS_ENUM_BATTERY_STATUS ((FIT_EXD_DATA_UNITS)25) +#define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_BEAM_ANGLE_MODE ((FIT_EXD_DATA_UNITS)26) +#define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_BATTERY_STATUS ((FIT_EXD_DATA_UNITS)27) +#define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_NETWORK_CONFIG_TYPE ((FIT_EXD_DATA_UNITS)28) +#define FIT_EXD_DATA_UNITS_LIGHTS ((FIT_EXD_DATA_UNITS)29) +#define FIT_EXD_DATA_UNITS_SECONDS ((FIT_EXD_DATA_UNITS)30) +#define FIT_EXD_DATA_UNITS_MINUTES ((FIT_EXD_DATA_UNITS)31) +#define FIT_EXD_DATA_UNITS_HOURS ((FIT_EXD_DATA_UNITS)32) +#define FIT_EXD_DATA_UNITS_CALORIES ((FIT_EXD_DATA_UNITS)33) +#define FIT_EXD_DATA_UNITS_KILOJOULES ((FIT_EXD_DATA_UNITS)34) +#define FIT_EXD_DATA_UNITS_MILLISECONDS ((FIT_EXD_DATA_UNITS)35) +#define FIT_EXD_DATA_UNITS_SECOND_PER_MILE ((FIT_EXD_DATA_UNITS)36) +#define FIT_EXD_DATA_UNITS_SECOND_PER_KILOMETER ((FIT_EXD_DATA_UNITS)37) +#define FIT_EXD_DATA_UNITS_CENTIMETER ((FIT_EXD_DATA_UNITS)38) +#define FIT_EXD_DATA_UNITS_ENUM_COURSE_POINT ((FIT_EXD_DATA_UNITS)39) +#define FIT_EXD_DATA_UNITS_BRADIANS ((FIT_EXD_DATA_UNITS)40) +#define FIT_EXD_DATA_UNITS_ENUM_SPORT ((FIT_EXD_DATA_UNITS)41) +#define FIT_EXD_DATA_UNITS_INCHES_HG ((FIT_EXD_DATA_UNITS)42) +#define FIT_EXD_DATA_UNITS_MM_HG ((FIT_EXD_DATA_UNITS)43) +#define FIT_EXD_DATA_UNITS_MBARS ((FIT_EXD_DATA_UNITS)44) +#define FIT_EXD_DATA_UNITS_HECTO_PASCALS ((FIT_EXD_DATA_UNITS)45) +#define FIT_EXD_DATA_UNITS_FEET_PER_MIN ((FIT_EXD_DATA_UNITS)46) +#define FIT_EXD_DATA_UNITS_METERS_PER_MIN ((FIT_EXD_DATA_UNITS)47) +#define FIT_EXD_DATA_UNITS_METERS_PER_SEC ((FIT_EXD_DATA_UNITS)48) +#define FIT_EXD_DATA_UNITS_EIGHT_CARDINAL ((FIT_EXD_DATA_UNITS)49) +#define FIT_EXD_DATA_UNITS_COUNT 50 + +typedef FIT_ENUM FIT_EXD_QUALIFIERS; +#define FIT_EXD_QUALIFIERS_INVALID FIT_ENUM_INVALID +#define FIT_EXD_QUALIFIERS_NO_QUALIFIER ((FIT_EXD_QUALIFIERS)0) +#define FIT_EXD_QUALIFIERS_INSTANTANEOUS ((FIT_EXD_QUALIFIERS)1) +#define FIT_EXD_QUALIFIERS_AVERAGE ((FIT_EXD_QUALIFIERS)2) +#define FIT_EXD_QUALIFIERS_LAP ((FIT_EXD_QUALIFIERS)3) +#define FIT_EXD_QUALIFIERS_MAXIMUM ((FIT_EXD_QUALIFIERS)4) +#define FIT_EXD_QUALIFIERS_MAXIMUM_AVERAGE ((FIT_EXD_QUALIFIERS)5) +#define FIT_EXD_QUALIFIERS_MAXIMUM_LAP ((FIT_EXD_QUALIFIERS)6) +#define FIT_EXD_QUALIFIERS_LAST_LAP ((FIT_EXD_QUALIFIERS)7) +#define FIT_EXD_QUALIFIERS_AVERAGE_LAP ((FIT_EXD_QUALIFIERS)8) +#define FIT_EXD_QUALIFIERS_TO_DESTINATION ((FIT_EXD_QUALIFIERS)9) +#define FIT_EXD_QUALIFIERS_TO_GO ((FIT_EXD_QUALIFIERS)10) +#define FIT_EXD_QUALIFIERS_TO_NEXT ((FIT_EXD_QUALIFIERS)11) +#define FIT_EXD_QUALIFIERS_NEXT_COURSE_POINT ((FIT_EXD_QUALIFIERS)12) +#define FIT_EXD_QUALIFIERS_TOTAL ((FIT_EXD_QUALIFIERS)13) +#define FIT_EXD_QUALIFIERS_THREE_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)14) +#define FIT_EXD_QUALIFIERS_TEN_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)15) +#define FIT_EXD_QUALIFIERS_THIRTY_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)16) +#define FIT_EXD_QUALIFIERS_PERCENT_MAXIMUM ((FIT_EXD_QUALIFIERS)17) +#define FIT_EXD_QUALIFIERS_PERCENT_MAXIMUM_AVERAGE ((FIT_EXD_QUALIFIERS)18) +#define FIT_EXD_QUALIFIERS_LAP_PERCENT_MAXIMUM ((FIT_EXD_QUALIFIERS)19) +#define FIT_EXD_QUALIFIERS_ELAPSED ((FIT_EXD_QUALIFIERS)20) +#define FIT_EXD_QUALIFIERS_SUNRISE ((FIT_EXD_QUALIFIERS)21) +#define FIT_EXD_QUALIFIERS_SUNSET ((FIT_EXD_QUALIFIERS)22) +#define FIT_EXD_QUALIFIERS_COMPARED_TO_VIRTUAL_PARTNER ((FIT_EXD_QUALIFIERS)23) +#define FIT_EXD_QUALIFIERS_MAXIMUM_24H ((FIT_EXD_QUALIFIERS)24) +#define FIT_EXD_QUALIFIERS_MINIMUM_24H ((FIT_EXD_QUALIFIERS)25) +#define FIT_EXD_QUALIFIERS_MINIMUM ((FIT_EXD_QUALIFIERS)26) +#define FIT_EXD_QUALIFIERS_FIRST ((FIT_EXD_QUALIFIERS)27) +#define FIT_EXD_QUALIFIERS_SECOND ((FIT_EXD_QUALIFIERS)28) +#define FIT_EXD_QUALIFIERS_THIRD ((FIT_EXD_QUALIFIERS)29) +#define FIT_EXD_QUALIFIERS_SHIFTER ((FIT_EXD_QUALIFIERS)30) +#define FIT_EXD_QUALIFIERS_LAST_SPORT ((FIT_EXD_QUALIFIERS)31) +#define FIT_EXD_QUALIFIERS_MOVING ((FIT_EXD_QUALIFIERS)32) +#define FIT_EXD_QUALIFIERS_STOPPED ((FIT_EXD_QUALIFIERS)33) +#define FIT_EXD_QUALIFIERS_ESTIMATED_TOTAL ((FIT_EXD_QUALIFIERS)34) +#define FIT_EXD_QUALIFIERS_ZONE_9 ((FIT_EXD_QUALIFIERS)242) +#define FIT_EXD_QUALIFIERS_ZONE_8 ((FIT_EXD_QUALIFIERS)243) +#define FIT_EXD_QUALIFIERS_ZONE_7 ((FIT_EXD_QUALIFIERS)244) +#define FIT_EXD_QUALIFIERS_ZONE_6 ((FIT_EXD_QUALIFIERS)245) +#define FIT_EXD_QUALIFIERS_ZONE_5 ((FIT_EXD_QUALIFIERS)246) +#define FIT_EXD_QUALIFIERS_ZONE_4 ((FIT_EXD_QUALIFIERS)247) +#define FIT_EXD_QUALIFIERS_ZONE_3 ((FIT_EXD_QUALIFIERS)248) +#define FIT_EXD_QUALIFIERS_ZONE_2 ((FIT_EXD_QUALIFIERS)249) +#define FIT_EXD_QUALIFIERS_ZONE_1 ((FIT_EXD_QUALIFIERS)250) +#define FIT_EXD_QUALIFIERS_COUNT 44 + +typedef FIT_ENUM FIT_EXD_DESCRIPTORS; +#define FIT_EXD_DESCRIPTORS_INVALID FIT_ENUM_INVALID +#define FIT_EXD_DESCRIPTORS_BIKE_LIGHT_BATTERY_STATUS ((FIT_EXD_DESCRIPTORS)0) +#define FIT_EXD_DESCRIPTORS_BEAM_ANGLE_STATUS ((FIT_EXD_DESCRIPTORS)1) +#define FIT_EXD_DESCRIPTORS_BATERY_LEVEL ((FIT_EXD_DESCRIPTORS)2) +#define FIT_EXD_DESCRIPTORS_LIGHT_NETWORK_MODE ((FIT_EXD_DESCRIPTORS)3) +#define FIT_EXD_DESCRIPTORS_NUMBER_LIGHTS_CONNECTED ((FIT_EXD_DESCRIPTORS)4) +#define FIT_EXD_DESCRIPTORS_CADENCE ((FIT_EXD_DESCRIPTORS)5) +#define FIT_EXD_DESCRIPTORS_DISTANCE ((FIT_EXD_DESCRIPTORS)6) +#define FIT_EXD_DESCRIPTORS_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)7) +#define FIT_EXD_DESCRIPTORS_HEADING ((FIT_EXD_DESCRIPTORS)8) +#define FIT_EXD_DESCRIPTORS_TIME ((FIT_EXD_DESCRIPTORS)9) +#define FIT_EXD_DESCRIPTORS_BATTERY_LEVEL ((FIT_EXD_DESCRIPTORS)10) +#define FIT_EXD_DESCRIPTORS_TRAINER_RESISTANCE ((FIT_EXD_DESCRIPTORS)11) +#define FIT_EXD_DESCRIPTORS_TRAINER_TARGET_POWER ((FIT_EXD_DESCRIPTORS)12) +#define FIT_EXD_DESCRIPTORS_TIME_SEATED ((FIT_EXD_DESCRIPTORS)13) +#define FIT_EXD_DESCRIPTORS_TIME_STANDING ((FIT_EXD_DESCRIPTORS)14) +#define FIT_EXD_DESCRIPTORS_ELEVATION ((FIT_EXD_DESCRIPTORS)15) +#define FIT_EXD_DESCRIPTORS_GRADE ((FIT_EXD_DESCRIPTORS)16) +#define FIT_EXD_DESCRIPTORS_ASCENT ((FIT_EXD_DESCRIPTORS)17) +#define FIT_EXD_DESCRIPTORS_DESCENT ((FIT_EXD_DESCRIPTORS)18) +#define FIT_EXD_DESCRIPTORS_VERTICAL_SPEED ((FIT_EXD_DESCRIPTORS)19) +#define FIT_EXD_DESCRIPTORS_DI2_BATTERY_LEVEL ((FIT_EXD_DESCRIPTORS)20) +#define FIT_EXD_DESCRIPTORS_FRONT_GEAR ((FIT_EXD_DESCRIPTORS)21) +#define FIT_EXD_DESCRIPTORS_REAR_GEAR ((FIT_EXD_DESCRIPTORS)22) +#define FIT_EXD_DESCRIPTORS_GEAR_RATIO ((FIT_EXD_DESCRIPTORS)23) +#define FIT_EXD_DESCRIPTORS_HEART_RATE ((FIT_EXD_DESCRIPTORS)24) +#define FIT_EXD_DESCRIPTORS_HEART_RATE_ZONE ((FIT_EXD_DESCRIPTORS)25) +#define FIT_EXD_DESCRIPTORS_TIME_IN_HEART_RATE_ZONE ((FIT_EXD_DESCRIPTORS)26) +#define FIT_EXD_DESCRIPTORS_HEART_RATE_RESERVE ((FIT_EXD_DESCRIPTORS)27) +#define FIT_EXD_DESCRIPTORS_CALORIES ((FIT_EXD_DESCRIPTORS)28) +#define FIT_EXD_DESCRIPTORS_GPS_ACCURACY ((FIT_EXD_DESCRIPTORS)29) +#define FIT_EXD_DESCRIPTORS_GPS_SIGNAL_STRENGTH ((FIT_EXD_DESCRIPTORS)30) +#define FIT_EXD_DESCRIPTORS_TEMPERATURE ((FIT_EXD_DESCRIPTORS)31) +#define FIT_EXD_DESCRIPTORS_TIME_OF_DAY ((FIT_EXD_DESCRIPTORS)32) +#define FIT_EXD_DESCRIPTORS_BALANCE ((FIT_EXD_DESCRIPTORS)33) +#define FIT_EXD_DESCRIPTORS_PEDAL_SMOOTHNESS ((FIT_EXD_DESCRIPTORS)34) +#define FIT_EXD_DESCRIPTORS_POWER ((FIT_EXD_DESCRIPTORS)35) +#define FIT_EXD_DESCRIPTORS_FUNCTIONAL_THRESHOLD_POWER ((FIT_EXD_DESCRIPTORS)36) +#define FIT_EXD_DESCRIPTORS_INTENSITY_FACTOR ((FIT_EXD_DESCRIPTORS)37) +#define FIT_EXD_DESCRIPTORS_WORK ((FIT_EXD_DESCRIPTORS)38) +#define FIT_EXD_DESCRIPTORS_POWER_RATIO ((FIT_EXD_DESCRIPTORS)39) +#define FIT_EXD_DESCRIPTORS_NORMALIZED_POWER ((FIT_EXD_DESCRIPTORS)40) +#define FIT_EXD_DESCRIPTORS_TRAINING_STRESS_SCORE ((FIT_EXD_DESCRIPTORS)41) +#define FIT_EXD_DESCRIPTORS_TIME_ON_ZONE ((FIT_EXD_DESCRIPTORS)42) +#define FIT_EXD_DESCRIPTORS_SPEED ((FIT_EXD_DESCRIPTORS)43) +#define FIT_EXD_DESCRIPTORS_LAPS ((FIT_EXD_DESCRIPTORS)44) +#define FIT_EXD_DESCRIPTORS_REPS ((FIT_EXD_DESCRIPTORS)45) +#define FIT_EXD_DESCRIPTORS_WORKOUT_STEP ((FIT_EXD_DESCRIPTORS)46) +#define FIT_EXD_DESCRIPTORS_COURSE_DISTANCE ((FIT_EXD_DESCRIPTORS)47) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_DISTANCE ((FIT_EXD_DESCRIPTORS)48) +#define FIT_EXD_DESCRIPTORS_COURSE_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)49) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)50) +#define FIT_EXD_DESCRIPTORS_COURSE_TIME ((FIT_EXD_DESCRIPTORS)51) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_TIME ((FIT_EXD_DESCRIPTORS)52) +#define FIT_EXD_DESCRIPTORS_COURSE_HEADING ((FIT_EXD_DESCRIPTORS)53) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_HEADING ((FIT_EXD_DESCRIPTORS)54) +#define FIT_EXD_DESCRIPTORS_POWER_ZONE ((FIT_EXD_DESCRIPTORS)55) +#define FIT_EXD_DESCRIPTORS_TORQUE_EFFECTIVENESS ((FIT_EXD_DESCRIPTORS)56) +#define FIT_EXD_DESCRIPTORS_TIMER_TIME ((FIT_EXD_DESCRIPTORS)57) +#define FIT_EXD_DESCRIPTORS_POWER_WEIGHT_RATIO ((FIT_EXD_DESCRIPTORS)58) +#define FIT_EXD_DESCRIPTORS_LEFT_PLATFORM_CENTER_OFFSET ((FIT_EXD_DESCRIPTORS)59) +#define FIT_EXD_DESCRIPTORS_RIGHT_PLATFORM_CENTER_OFFSET ((FIT_EXD_DESCRIPTORS)60) +#define FIT_EXD_DESCRIPTORS_LEFT_POWER_PHASE_START_ANGLE ((FIT_EXD_DESCRIPTORS)61) +#define FIT_EXD_DESCRIPTORS_RIGHT_POWER_PHASE_START_ANGLE ((FIT_EXD_DESCRIPTORS)62) +#define FIT_EXD_DESCRIPTORS_LEFT_POWER_PHASE_FINISH_ANGLE ((FIT_EXD_DESCRIPTORS)63) +#define FIT_EXD_DESCRIPTORS_RIGHT_POWER_PHASE_FINISH_ANGLE ((FIT_EXD_DESCRIPTORS)64) +#define FIT_EXD_DESCRIPTORS_GEARS ((FIT_EXD_DESCRIPTORS)65) // Combined gear information +#define FIT_EXD_DESCRIPTORS_PACE ((FIT_EXD_DESCRIPTORS)66) +#define FIT_EXD_DESCRIPTORS_TRAINING_EFFECT ((FIT_EXD_DESCRIPTORS)67) +#define FIT_EXD_DESCRIPTORS_VERTICAL_OSCILLATION ((FIT_EXD_DESCRIPTORS)68) +#define FIT_EXD_DESCRIPTORS_VERTICAL_RATIO ((FIT_EXD_DESCRIPTORS)69) +#define FIT_EXD_DESCRIPTORS_GROUND_CONTACT_TIME ((FIT_EXD_DESCRIPTORS)70) +#define FIT_EXD_DESCRIPTORS_LEFT_GROUND_CONTACT_TIME_BALANCE ((FIT_EXD_DESCRIPTORS)71) +#define FIT_EXD_DESCRIPTORS_RIGHT_GROUND_CONTACT_TIME_BALANCE ((FIT_EXD_DESCRIPTORS)72) +#define FIT_EXD_DESCRIPTORS_STRIDE_LENGTH ((FIT_EXD_DESCRIPTORS)73) +#define FIT_EXD_DESCRIPTORS_RUNNING_CADENCE ((FIT_EXD_DESCRIPTORS)74) +#define FIT_EXD_DESCRIPTORS_PERFORMANCE_CONDITION ((FIT_EXD_DESCRIPTORS)75) +#define FIT_EXD_DESCRIPTORS_COURSE_TYPE ((FIT_EXD_DESCRIPTORS)76) +#define FIT_EXD_DESCRIPTORS_TIME_IN_POWER_ZONE ((FIT_EXD_DESCRIPTORS)77) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_TURN ((FIT_EXD_DESCRIPTORS)78) +#define FIT_EXD_DESCRIPTORS_COURSE_LOCATION ((FIT_EXD_DESCRIPTORS)79) +#define FIT_EXD_DESCRIPTORS_NAVIGATION_LOCATION ((FIT_EXD_DESCRIPTORS)80) +#define FIT_EXD_DESCRIPTORS_COMPASS ((FIT_EXD_DESCRIPTORS)81) +#define FIT_EXD_DESCRIPTORS_GEAR_COMBO ((FIT_EXD_DESCRIPTORS)82) +#define FIT_EXD_DESCRIPTORS_MUSCLE_OXYGEN ((FIT_EXD_DESCRIPTORS)83) +#define FIT_EXD_DESCRIPTORS_ICON ((FIT_EXD_DESCRIPTORS)84) +#define FIT_EXD_DESCRIPTORS_COMPASS_HEADING ((FIT_EXD_DESCRIPTORS)85) +#define FIT_EXD_DESCRIPTORS_GPS_HEADING ((FIT_EXD_DESCRIPTORS)86) +#define FIT_EXD_DESCRIPTORS_GPS_ELEVATION ((FIT_EXD_DESCRIPTORS)87) +#define FIT_EXD_DESCRIPTORS_ANAEROBIC_TRAINING_EFFECT ((FIT_EXD_DESCRIPTORS)88) +#define FIT_EXD_DESCRIPTORS_COURSE ((FIT_EXD_DESCRIPTORS)89) +#define FIT_EXD_DESCRIPTORS_OFF_COURSE ((FIT_EXD_DESCRIPTORS)90) +#define FIT_EXD_DESCRIPTORS_GLIDE_RATIO ((FIT_EXD_DESCRIPTORS)91) +#define FIT_EXD_DESCRIPTORS_VERTICAL_DISTANCE ((FIT_EXD_DESCRIPTORS)92) +#define FIT_EXD_DESCRIPTORS_VMG ((FIT_EXD_DESCRIPTORS)93) +#define FIT_EXD_DESCRIPTORS_AMBIENT_PRESSURE ((FIT_EXD_DESCRIPTORS)94) +#define FIT_EXD_DESCRIPTORS_PRESSURE ((FIT_EXD_DESCRIPTORS)95) +#define FIT_EXD_DESCRIPTORS_VAM ((FIT_EXD_DESCRIPTORS)96) +#define FIT_EXD_DESCRIPTORS_COUNT 97 + +typedef FIT_UINT32 FIT_AUTO_ACTIVITY_DETECT; +#define FIT_AUTO_ACTIVITY_DETECT_INVALID FIT_UINT32_INVALID +#define FIT_AUTO_ACTIVITY_DETECT_NONE ((FIT_AUTO_ACTIVITY_DETECT)0x00000000) +#define FIT_AUTO_ACTIVITY_DETECT_RUNNING ((FIT_AUTO_ACTIVITY_DETECT)0x00000001) +#define FIT_AUTO_ACTIVITY_DETECT_CYCLING ((FIT_AUTO_ACTIVITY_DETECT)0x00000002) +#define FIT_AUTO_ACTIVITY_DETECT_SWIMMING ((FIT_AUTO_ACTIVITY_DETECT)0x00000004) +#define FIT_AUTO_ACTIVITY_DETECT_WALKING ((FIT_AUTO_ACTIVITY_DETECT)0x00000008) +#define FIT_AUTO_ACTIVITY_DETECT_ELLIPTICAL ((FIT_AUTO_ACTIVITY_DETECT)0x00000020) +#define FIT_AUTO_ACTIVITY_DETECT_SEDENTARY ((FIT_AUTO_ACTIVITY_DETECT)0x00000400) +#define FIT_AUTO_ACTIVITY_DETECT_COUNT 7 + +typedef FIT_UINT32Z FIT_SUPPORTED_EXD_SCREEN_LAYOUTS; +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_INVALID FIT_UINT32Z_INVALID +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_FULL_SCREEN ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000001) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000002) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000004) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL_RIGHT_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000008) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL_BOTTOM_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000010) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_FULL_QUARTER_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000020) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL_LEFT_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000040) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL_TOP_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000080) +#define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_COUNT 8 + +typedef FIT_UINT8 FIT_FIT_BASE_TYPE; +#define FIT_FIT_BASE_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_FIT_BASE_TYPE_ENUM ((FIT_FIT_BASE_TYPE)0) +#define FIT_FIT_BASE_TYPE_SINT8 ((FIT_FIT_BASE_TYPE)1) +#define FIT_FIT_BASE_TYPE_UINT8 ((FIT_FIT_BASE_TYPE)2) +#define FIT_FIT_BASE_TYPE_SINT16 ((FIT_FIT_BASE_TYPE)131) +#define FIT_FIT_BASE_TYPE_UINT16 ((FIT_FIT_BASE_TYPE)132) +#define FIT_FIT_BASE_TYPE_SINT32 ((FIT_FIT_BASE_TYPE)133) +#define FIT_FIT_BASE_TYPE_UINT32 ((FIT_FIT_BASE_TYPE)134) +#define FIT_FIT_BASE_TYPE_STRING ((FIT_FIT_BASE_TYPE)7) +#define FIT_FIT_BASE_TYPE_FLOAT32 ((FIT_FIT_BASE_TYPE)136) +#define FIT_FIT_BASE_TYPE_FLOAT64 ((FIT_FIT_BASE_TYPE)137) +#define FIT_FIT_BASE_TYPE_UINT8Z ((FIT_FIT_BASE_TYPE)10) +#define FIT_FIT_BASE_TYPE_UINT16Z ((FIT_FIT_BASE_TYPE)139) +#define FIT_FIT_BASE_TYPE_UINT32Z ((FIT_FIT_BASE_TYPE)140) +#define FIT_FIT_BASE_TYPE_BYTE ((FIT_FIT_BASE_TYPE)13) +#define FIT_FIT_BASE_TYPE_SINT64 ((FIT_FIT_BASE_TYPE)142) +#define FIT_FIT_BASE_TYPE_UINT64 ((FIT_FIT_BASE_TYPE)143) +#define FIT_FIT_BASE_TYPE_UINT64Z ((FIT_FIT_BASE_TYPE)144) +#define FIT_FIT_BASE_TYPE_COUNT 17 + +typedef FIT_ENUM FIT_TURN_TYPE; +#define FIT_TURN_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_TURN_TYPE_ARRIVING_IDX ((FIT_TURN_TYPE)0) +#define FIT_TURN_TYPE_ARRIVING_LEFT_IDX ((FIT_TURN_TYPE)1) +#define FIT_TURN_TYPE_ARRIVING_RIGHT_IDX ((FIT_TURN_TYPE)2) +#define FIT_TURN_TYPE_ARRIVING_VIA_IDX ((FIT_TURN_TYPE)3) +#define FIT_TURN_TYPE_ARRIVING_VIA_LEFT_IDX ((FIT_TURN_TYPE)4) +#define FIT_TURN_TYPE_ARRIVING_VIA_RIGHT_IDX ((FIT_TURN_TYPE)5) +#define FIT_TURN_TYPE_BEAR_KEEP_LEFT_IDX ((FIT_TURN_TYPE)6) +#define FIT_TURN_TYPE_BEAR_KEEP_RIGHT_IDX ((FIT_TURN_TYPE)7) +#define FIT_TURN_TYPE_CONTINUE_IDX ((FIT_TURN_TYPE)8) +#define FIT_TURN_TYPE_EXIT_LEFT_IDX ((FIT_TURN_TYPE)9) +#define FIT_TURN_TYPE_EXIT_RIGHT_IDX ((FIT_TURN_TYPE)10) +#define FIT_TURN_TYPE_FERRY_IDX ((FIT_TURN_TYPE)11) +#define FIT_TURN_TYPE_ROUNDABOUT_45_IDX ((FIT_TURN_TYPE)12) +#define FIT_TURN_TYPE_ROUNDABOUT_90_IDX ((FIT_TURN_TYPE)13) +#define FIT_TURN_TYPE_ROUNDABOUT_135_IDX ((FIT_TURN_TYPE)14) +#define FIT_TURN_TYPE_ROUNDABOUT_180_IDX ((FIT_TURN_TYPE)15) +#define FIT_TURN_TYPE_ROUNDABOUT_225_IDX ((FIT_TURN_TYPE)16) +#define FIT_TURN_TYPE_ROUNDABOUT_270_IDX ((FIT_TURN_TYPE)17) +#define FIT_TURN_TYPE_ROUNDABOUT_315_IDX ((FIT_TURN_TYPE)18) +#define FIT_TURN_TYPE_ROUNDABOUT_360_IDX ((FIT_TURN_TYPE)19) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_45_IDX ((FIT_TURN_TYPE)20) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_90_IDX ((FIT_TURN_TYPE)21) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_135_IDX ((FIT_TURN_TYPE)22) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_180_IDX ((FIT_TURN_TYPE)23) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_225_IDX ((FIT_TURN_TYPE)24) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_270_IDX ((FIT_TURN_TYPE)25) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_315_IDX ((FIT_TURN_TYPE)26) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_360_IDX ((FIT_TURN_TYPE)27) +#define FIT_TURN_TYPE_ROUNDABOUT_GENERIC_IDX ((FIT_TURN_TYPE)28) +#define FIT_TURN_TYPE_ROUNDABOUT_NEG_GENERIC_IDX ((FIT_TURN_TYPE)29) +#define FIT_TURN_TYPE_SHARP_TURN_LEFT_IDX ((FIT_TURN_TYPE)30) +#define FIT_TURN_TYPE_SHARP_TURN_RIGHT_IDX ((FIT_TURN_TYPE)31) +#define FIT_TURN_TYPE_TURN_LEFT_IDX ((FIT_TURN_TYPE)32) +#define FIT_TURN_TYPE_TURN_RIGHT_IDX ((FIT_TURN_TYPE)33) +#define FIT_TURN_TYPE_UTURN_LEFT_IDX ((FIT_TURN_TYPE)34) +#define FIT_TURN_TYPE_UTURN_RIGHT_IDX ((FIT_TURN_TYPE)35) +#define FIT_TURN_TYPE_ICON_INV_IDX ((FIT_TURN_TYPE)36) +#define FIT_TURN_TYPE_ICON_IDX_CNT ((FIT_TURN_TYPE)37) +#define FIT_TURN_TYPE_COUNT 38 + +typedef FIT_UINT8 FIT_BIKE_LIGHT_BEAM_ANGLE_MODE; +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_INVALID FIT_UINT8_INVALID +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_MANUAL ((FIT_BIKE_LIGHT_BEAM_ANGLE_MODE)0) +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_AUTO ((FIT_BIKE_LIGHT_BEAM_ANGLE_MODE)1) +#define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_COUNT 2 + +typedef FIT_UINT16 FIT_FIT_BASE_UNIT; +#define FIT_FIT_BASE_UNIT_INVALID FIT_UINT16_INVALID +#define FIT_FIT_BASE_UNIT_OTHER ((FIT_FIT_BASE_UNIT)0) +#define FIT_FIT_BASE_UNIT_KILOGRAM ((FIT_FIT_BASE_UNIT)1) +#define FIT_FIT_BASE_UNIT_POUND ((FIT_FIT_BASE_UNIT)2) +#define FIT_FIT_BASE_UNIT_COUNT 3 + +typedef FIT_UINT8 FIT_SET_TYPE; +#define FIT_SET_TYPE_INVALID FIT_UINT8_INVALID +#define FIT_SET_TYPE_REST ((FIT_SET_TYPE)0) +#define FIT_SET_TYPE_ACTIVE ((FIT_SET_TYPE)1) +#define FIT_SET_TYPE_COUNT 2 + +typedef FIT_UINT16 FIT_EXERCISE_CATEGORY; +#define FIT_EXERCISE_CATEGORY_INVALID FIT_UINT16_INVALID +#define FIT_EXERCISE_CATEGORY_BENCH_PRESS ((FIT_EXERCISE_CATEGORY)0) +#define FIT_EXERCISE_CATEGORY_CALF_RAISE ((FIT_EXERCISE_CATEGORY)1) +#define FIT_EXERCISE_CATEGORY_CARDIO ((FIT_EXERCISE_CATEGORY)2) +#define FIT_EXERCISE_CATEGORY_CARRY ((FIT_EXERCISE_CATEGORY)3) +#define FIT_EXERCISE_CATEGORY_CHOP ((FIT_EXERCISE_CATEGORY)4) +#define FIT_EXERCISE_CATEGORY_CORE ((FIT_EXERCISE_CATEGORY)5) +#define FIT_EXERCISE_CATEGORY_CRUNCH ((FIT_EXERCISE_CATEGORY)6) +#define FIT_EXERCISE_CATEGORY_CURL ((FIT_EXERCISE_CATEGORY)7) +#define FIT_EXERCISE_CATEGORY_DEADLIFT ((FIT_EXERCISE_CATEGORY)8) +#define FIT_EXERCISE_CATEGORY_FLYE ((FIT_EXERCISE_CATEGORY)9) +#define FIT_EXERCISE_CATEGORY_HIP_RAISE ((FIT_EXERCISE_CATEGORY)10) +#define FIT_EXERCISE_CATEGORY_HIP_STABILITY ((FIT_EXERCISE_CATEGORY)11) +#define FIT_EXERCISE_CATEGORY_HIP_SWING ((FIT_EXERCISE_CATEGORY)12) +#define FIT_EXERCISE_CATEGORY_HYPEREXTENSION ((FIT_EXERCISE_CATEGORY)13) +#define FIT_EXERCISE_CATEGORY_LATERAL_RAISE ((FIT_EXERCISE_CATEGORY)14) +#define FIT_EXERCISE_CATEGORY_LEG_CURL ((FIT_EXERCISE_CATEGORY)15) +#define FIT_EXERCISE_CATEGORY_LEG_RAISE ((FIT_EXERCISE_CATEGORY)16) +#define FIT_EXERCISE_CATEGORY_LUNGE ((FIT_EXERCISE_CATEGORY)17) +#define FIT_EXERCISE_CATEGORY_OLYMPIC_LIFT ((FIT_EXERCISE_CATEGORY)18) +#define FIT_EXERCISE_CATEGORY_PLANK ((FIT_EXERCISE_CATEGORY)19) +#define FIT_EXERCISE_CATEGORY_PLYO ((FIT_EXERCISE_CATEGORY)20) +#define FIT_EXERCISE_CATEGORY_PULL_UP ((FIT_EXERCISE_CATEGORY)21) +#define FIT_EXERCISE_CATEGORY_PUSH_UP ((FIT_EXERCISE_CATEGORY)22) +#define FIT_EXERCISE_CATEGORY_ROW ((FIT_EXERCISE_CATEGORY)23) +#define FIT_EXERCISE_CATEGORY_SHOULDER_PRESS ((FIT_EXERCISE_CATEGORY)24) +#define FIT_EXERCISE_CATEGORY_SHOULDER_STABILITY ((FIT_EXERCISE_CATEGORY)25) +#define FIT_EXERCISE_CATEGORY_SHRUG ((FIT_EXERCISE_CATEGORY)26) +#define FIT_EXERCISE_CATEGORY_SIT_UP ((FIT_EXERCISE_CATEGORY)27) +#define FIT_EXERCISE_CATEGORY_SQUAT ((FIT_EXERCISE_CATEGORY)28) +#define FIT_EXERCISE_CATEGORY_TOTAL_BODY ((FIT_EXERCISE_CATEGORY)29) +#define FIT_EXERCISE_CATEGORY_TRICEPS_EXTENSION ((FIT_EXERCISE_CATEGORY)30) +#define FIT_EXERCISE_CATEGORY_WARM_UP ((FIT_EXERCISE_CATEGORY)31) +#define FIT_EXERCISE_CATEGORY_RUN ((FIT_EXERCISE_CATEGORY)32) +#define FIT_EXERCISE_CATEGORY_UNKNOWN ((FIT_EXERCISE_CATEGORY)65534) +#define FIT_EXERCISE_CATEGORY_COUNT 34 + +typedef FIT_UINT16 FIT_BENCH_PRESS_EXERCISE_NAME; +#define FIT_BENCH_PRESS_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_BENCH_PRESS_EXERCISE_NAME_ALTERNATING_DUMBBELL_CHEST_PRESS_ON_SWISS_BALL ((FIT_BENCH_PRESS_EXERCISE_NAME)0) +#define FIT_BENCH_PRESS_EXERCISE_NAME_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)1) +#define FIT_BENCH_PRESS_EXERCISE_NAME_BARBELL_BOARD_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)2) +#define FIT_BENCH_PRESS_EXERCISE_NAME_BARBELL_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)3) +#define FIT_BENCH_PRESS_EXERCISE_NAME_CLOSE_GRIP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)4) +#define FIT_BENCH_PRESS_EXERCISE_NAME_DECLINE_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)5) +#define FIT_BENCH_PRESS_EXERCISE_NAME_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)6) +#define FIT_BENCH_PRESS_EXERCISE_NAME_DUMBBELL_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)7) +#define FIT_BENCH_PRESS_EXERCISE_NAME_INCLINE_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)8) +#define FIT_BENCH_PRESS_EXERCISE_NAME_INCLINE_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)9) +#define FIT_BENCH_PRESS_EXERCISE_NAME_INCLINE_SMITH_MACHINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)10) +#define FIT_BENCH_PRESS_EXERCISE_NAME_ISOMETRIC_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)11) +#define FIT_BENCH_PRESS_EXERCISE_NAME_KETTLEBELL_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)12) +#define FIT_BENCH_PRESS_EXERCISE_NAME_NEUTRAL_GRIP_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)13) +#define FIT_BENCH_PRESS_EXERCISE_NAME_NEUTRAL_GRIP_DUMBBELL_INCLINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)14) +#define FIT_BENCH_PRESS_EXERCISE_NAME_ONE_ARM_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)15) +#define FIT_BENCH_PRESS_EXERCISE_NAME_WEIGHTED_ONE_ARM_FLOOR_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)16) +#define FIT_BENCH_PRESS_EXERCISE_NAME_PARTIAL_LOCKOUT ((FIT_BENCH_PRESS_EXERCISE_NAME)17) +#define FIT_BENCH_PRESS_EXERCISE_NAME_REVERSE_GRIP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)18) +#define FIT_BENCH_PRESS_EXERCISE_NAME_REVERSE_GRIP_INCLINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)19) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SINGLE_ARM_CABLE_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)20) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)21) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SMITH_MACHINE_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)22) +#define FIT_BENCH_PRESS_EXERCISE_NAME_SWISS_BALL_DUMBBELL_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)23) +#define FIT_BENCH_PRESS_EXERCISE_NAME_TRIPLE_STOP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)24) +#define FIT_BENCH_PRESS_EXERCISE_NAME_WIDE_GRIP_BARBELL_BENCH_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)25) +#define FIT_BENCH_PRESS_EXERCISE_NAME_ALTERNATING_DUMBBELL_CHEST_PRESS ((FIT_BENCH_PRESS_EXERCISE_NAME)26) +#define FIT_BENCH_PRESS_EXERCISE_NAME_COUNT 27 + +typedef FIT_UINT16 FIT_CALF_RAISE_EXERCISE_NAME; +#define FIT_CALF_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)0) +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_WEIGHTED_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)1) +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_SINGLE_LEG_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)2) +#define FIT_CALF_RAISE_EXERCISE_NAME_3_WAY_WEIGHTED_SINGLE_LEG_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)3) +#define FIT_CALF_RAISE_EXERCISE_NAME_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)4) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)5) +#define FIT_CALF_RAISE_EXERCISE_NAME_SEATED_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)6) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_SEATED_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)7) +#define FIT_CALF_RAISE_EXERCISE_NAME_SEATED_DUMBBELL_TOE_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)8) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_BENT_KNEE_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)9) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENT_KNEE_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)10) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_DECLINE_PUSH_UP ((FIT_CALF_RAISE_EXERCISE_NAME)11) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)12) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_DONKEY_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)13) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_KNEE_HOLD ((FIT_CALF_RAISE_EXERCISE_NAME)14) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_STANDING_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)15) +#define FIT_CALF_RAISE_EXERCISE_NAME_SINGLE_LEG_STANDING_DUMBBELL_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)16) +#define FIT_CALF_RAISE_EXERCISE_NAME_STANDING_BARBELL_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)17) +#define FIT_CALF_RAISE_EXERCISE_NAME_STANDING_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)18) +#define FIT_CALF_RAISE_EXERCISE_NAME_WEIGHTED_STANDING_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)19) +#define FIT_CALF_RAISE_EXERCISE_NAME_STANDING_DUMBBELL_CALF_RAISE ((FIT_CALF_RAISE_EXERCISE_NAME)20) +#define FIT_CALF_RAISE_EXERCISE_NAME_COUNT 21 + +typedef FIT_UINT16 FIT_CARDIO_EXERCISE_NAME; +#define FIT_CARDIO_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CARDIO_EXERCISE_NAME_BOB_AND_WEAVE_CIRCLE ((FIT_CARDIO_EXERCISE_NAME)0) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_BOB_AND_WEAVE_CIRCLE ((FIT_CARDIO_EXERCISE_NAME)1) +#define FIT_CARDIO_EXERCISE_NAME_CARDIO_CORE_CRAWL ((FIT_CARDIO_EXERCISE_NAME)2) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_CARDIO_CORE_CRAWL ((FIT_CARDIO_EXERCISE_NAME)3) +#define FIT_CARDIO_EXERCISE_NAME_DOUBLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)4) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_DOUBLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)5) +#define FIT_CARDIO_EXERCISE_NAME_JUMP_ROPE ((FIT_CARDIO_EXERCISE_NAME)6) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMP_ROPE ((FIT_CARDIO_EXERCISE_NAME)7) +#define FIT_CARDIO_EXERCISE_NAME_JUMP_ROPE_CROSSOVER ((FIT_CARDIO_EXERCISE_NAME)8) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMP_ROPE_CROSSOVER ((FIT_CARDIO_EXERCISE_NAME)9) +#define FIT_CARDIO_EXERCISE_NAME_JUMP_ROPE_JOG ((FIT_CARDIO_EXERCISE_NAME)10) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMP_ROPE_JOG ((FIT_CARDIO_EXERCISE_NAME)11) +#define FIT_CARDIO_EXERCISE_NAME_JUMPING_JACKS ((FIT_CARDIO_EXERCISE_NAME)12) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_JUMPING_JACKS ((FIT_CARDIO_EXERCISE_NAME)13) +#define FIT_CARDIO_EXERCISE_NAME_SKI_MOGULS ((FIT_CARDIO_EXERCISE_NAME)14) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_SKI_MOGULS ((FIT_CARDIO_EXERCISE_NAME)15) +#define FIT_CARDIO_EXERCISE_NAME_SPLIT_JACKS ((FIT_CARDIO_EXERCISE_NAME)16) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_SPLIT_JACKS ((FIT_CARDIO_EXERCISE_NAME)17) +#define FIT_CARDIO_EXERCISE_NAME_SQUAT_JACKS ((FIT_CARDIO_EXERCISE_NAME)18) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_SQUAT_JACKS ((FIT_CARDIO_EXERCISE_NAME)19) +#define FIT_CARDIO_EXERCISE_NAME_TRIPLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)20) +#define FIT_CARDIO_EXERCISE_NAME_WEIGHTED_TRIPLE_UNDER ((FIT_CARDIO_EXERCISE_NAME)21) +#define FIT_CARDIO_EXERCISE_NAME_COUNT 22 + +typedef FIT_UINT16 FIT_CARRY_EXERCISE_NAME; +#define FIT_CARRY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CARRY_EXERCISE_NAME_BAR_HOLDS ((FIT_CARRY_EXERCISE_NAME)0) +#define FIT_CARRY_EXERCISE_NAME_FARMERS_WALK ((FIT_CARRY_EXERCISE_NAME)1) +#define FIT_CARRY_EXERCISE_NAME_FARMERS_WALK_ON_TOES ((FIT_CARRY_EXERCISE_NAME)2) +#define FIT_CARRY_EXERCISE_NAME_HEX_DUMBBELL_HOLD ((FIT_CARRY_EXERCISE_NAME)3) +#define FIT_CARRY_EXERCISE_NAME_OVERHEAD_CARRY ((FIT_CARRY_EXERCISE_NAME)4) +#define FIT_CARRY_EXERCISE_NAME_COUNT 5 + +typedef FIT_UINT16 FIT_CHOP_EXERCISE_NAME; +#define FIT_CHOP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CHOP_EXERCISE_NAME_CABLE_PULL_THROUGH ((FIT_CHOP_EXERCISE_NAME)0) +#define FIT_CHOP_EXERCISE_NAME_CABLE_ROTATIONAL_LIFT ((FIT_CHOP_EXERCISE_NAME)1) +#define FIT_CHOP_EXERCISE_NAME_CABLE_WOODCHOP ((FIT_CHOP_EXERCISE_NAME)2) +#define FIT_CHOP_EXERCISE_NAME_CROSS_CHOP_TO_KNEE ((FIT_CHOP_EXERCISE_NAME)3) +#define FIT_CHOP_EXERCISE_NAME_WEIGHTED_CROSS_CHOP_TO_KNEE ((FIT_CHOP_EXERCISE_NAME)4) +#define FIT_CHOP_EXERCISE_NAME_DUMBBELL_CHOP ((FIT_CHOP_EXERCISE_NAME)5) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_ROTATION ((FIT_CHOP_EXERCISE_NAME)6) +#define FIT_CHOP_EXERCISE_NAME_WEIGHTED_HALF_KNEELING_ROTATION ((FIT_CHOP_EXERCISE_NAME)7) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)8) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_ROTATIONAL_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)9) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_STABILITY_CHOP ((FIT_CHOP_EXERCISE_NAME)10) +#define FIT_CHOP_EXERCISE_NAME_HALF_KNEELING_STABILITY_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)11) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)12) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_ROTATIONAL_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)13) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_STABILITY_CHOP ((FIT_CHOP_EXERCISE_NAME)14) +#define FIT_CHOP_EXERCISE_NAME_KNEELING_WOODCHOPPER ((FIT_CHOP_EXERCISE_NAME)15) +#define FIT_CHOP_EXERCISE_NAME_MEDICINE_BALL_WOOD_CHOPS ((FIT_CHOP_EXERCISE_NAME)16) +#define FIT_CHOP_EXERCISE_NAME_POWER_SQUAT_CHOPS ((FIT_CHOP_EXERCISE_NAME)17) +#define FIT_CHOP_EXERCISE_NAME_WEIGHTED_POWER_SQUAT_CHOPS ((FIT_CHOP_EXERCISE_NAME)18) +#define FIT_CHOP_EXERCISE_NAME_STANDING_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)19) +#define FIT_CHOP_EXERCISE_NAME_STANDING_SPLIT_ROTATIONAL_CHOP ((FIT_CHOP_EXERCISE_NAME)20) +#define FIT_CHOP_EXERCISE_NAME_STANDING_SPLIT_ROTATIONAL_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)21) +#define FIT_CHOP_EXERCISE_NAME_STANDING_STABILITY_REVERSE_CHOP ((FIT_CHOP_EXERCISE_NAME)22) +#define FIT_CHOP_EXERCISE_NAME_COUNT 23 + +typedef FIT_UINT16 FIT_CORE_EXERCISE_NAME; +#define FIT_CORE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CORE_EXERCISE_NAME_ABS_JABS ((FIT_CORE_EXERCISE_NAME)0) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_ABS_JABS ((FIT_CORE_EXERCISE_NAME)1) +#define FIT_CORE_EXERCISE_NAME_ALTERNATING_PLATE_REACH ((FIT_CORE_EXERCISE_NAME)2) +#define FIT_CORE_EXERCISE_NAME_BARBELL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)3) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_BARBELL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)4) +#define FIT_CORE_EXERCISE_NAME_BODY_BAR_OBLIQUE_TWIST ((FIT_CORE_EXERCISE_NAME)5) +#define FIT_CORE_EXERCISE_NAME_CABLE_CORE_PRESS ((FIT_CORE_EXERCISE_NAME)6) +#define FIT_CORE_EXERCISE_NAME_CABLE_SIDE_BEND ((FIT_CORE_EXERCISE_NAME)7) +#define FIT_CORE_EXERCISE_NAME_SIDE_BEND ((FIT_CORE_EXERCISE_NAME)8) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SIDE_BEND ((FIT_CORE_EXERCISE_NAME)9) +#define FIT_CORE_EXERCISE_NAME_CRESCENT_CIRCLE ((FIT_CORE_EXERCISE_NAME)10) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_CRESCENT_CIRCLE ((FIT_CORE_EXERCISE_NAME)11) +#define FIT_CORE_EXERCISE_NAME_CYCLING_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)12) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_CYCLING_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)13) +#define FIT_CORE_EXERCISE_NAME_ELEVATED_FEET_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)14) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_ELEVATED_FEET_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)15) +#define FIT_CORE_EXERCISE_NAME_HALF_TURKISH_GET_UP ((FIT_CORE_EXERCISE_NAME)16) +#define FIT_CORE_EXERCISE_NAME_KETTLEBELL_WINDMILL ((FIT_CORE_EXERCISE_NAME)17) +#define FIT_CORE_EXERCISE_NAME_KNEELING_AB_WHEEL ((FIT_CORE_EXERCISE_NAME)18) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_KNEELING_AB_WHEEL ((FIT_CORE_EXERCISE_NAME)19) +#define FIT_CORE_EXERCISE_NAME_MODIFIED_FRONT_LEVER ((FIT_CORE_EXERCISE_NAME)20) +#define FIT_CORE_EXERCISE_NAME_OPEN_KNEE_TUCKS ((FIT_CORE_EXERCISE_NAME)21) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_OPEN_KNEE_TUCKS ((FIT_CORE_EXERCISE_NAME)22) +#define FIT_CORE_EXERCISE_NAME_SIDE_ABS_LEG_LIFT ((FIT_CORE_EXERCISE_NAME)23) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SIDE_ABS_LEG_LIFT ((FIT_CORE_EXERCISE_NAME)24) +#define FIT_CORE_EXERCISE_NAME_SWISS_BALL_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)25) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SWISS_BALL_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)26) +#define FIT_CORE_EXERCISE_NAME_SWISS_BALL_PIKE ((FIT_CORE_EXERCISE_NAME)27) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PIKE ((FIT_CORE_EXERCISE_NAME)28) +#define FIT_CORE_EXERCISE_NAME_SWISS_BALL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)29) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_SWISS_BALL_ROLLOUT ((FIT_CORE_EXERCISE_NAME)30) +#define FIT_CORE_EXERCISE_NAME_TRIANGLE_HIP_PRESS ((FIT_CORE_EXERCISE_NAME)31) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_TRIANGLE_HIP_PRESS ((FIT_CORE_EXERCISE_NAME)32) +#define FIT_CORE_EXERCISE_NAME_TRX_SUSPENDED_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)33) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_TRX_SUSPENDED_JACKKNIFE ((FIT_CORE_EXERCISE_NAME)34) +#define FIT_CORE_EXERCISE_NAME_U_BOAT ((FIT_CORE_EXERCISE_NAME)35) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_U_BOAT ((FIT_CORE_EXERCISE_NAME)36) +#define FIT_CORE_EXERCISE_NAME_WINDMILL_SWITCHES ((FIT_CORE_EXERCISE_NAME)37) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_WINDMILL_SWITCHES ((FIT_CORE_EXERCISE_NAME)38) +#define FIT_CORE_EXERCISE_NAME_ALTERNATING_SLIDE_OUT ((FIT_CORE_EXERCISE_NAME)39) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_ALTERNATING_SLIDE_OUT ((FIT_CORE_EXERCISE_NAME)40) +#define FIT_CORE_EXERCISE_NAME_GHD_BACK_EXTENSIONS ((FIT_CORE_EXERCISE_NAME)41) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_GHD_BACK_EXTENSIONS ((FIT_CORE_EXERCISE_NAME)42) +#define FIT_CORE_EXERCISE_NAME_OVERHEAD_WALK ((FIT_CORE_EXERCISE_NAME)43) +#define FIT_CORE_EXERCISE_NAME_INCHWORM ((FIT_CORE_EXERCISE_NAME)44) +#define FIT_CORE_EXERCISE_NAME_WEIGHTED_MODIFIED_FRONT_LEVER ((FIT_CORE_EXERCISE_NAME)45) +#define FIT_CORE_EXERCISE_NAME_RUSSIAN_TWIST ((FIT_CORE_EXERCISE_NAME)46) +#define FIT_CORE_EXERCISE_NAME_ABDOMINAL_LEG_ROTATIONS ((FIT_CORE_EXERCISE_NAME)47) // Deprecated do not use +#define FIT_CORE_EXERCISE_NAME_ARM_AND_LEG_EXTENSION_ON_KNEES ((FIT_CORE_EXERCISE_NAME)48) +#define FIT_CORE_EXERCISE_NAME_BICYCLE ((FIT_CORE_EXERCISE_NAME)49) +#define FIT_CORE_EXERCISE_NAME_BICEP_CURL_WITH_LEG_EXTENSION ((FIT_CORE_EXERCISE_NAME)50) +#define FIT_CORE_EXERCISE_NAME_CAT_COW ((FIT_CORE_EXERCISE_NAME)51) +#define FIT_CORE_EXERCISE_NAME_CORKSCREW ((FIT_CORE_EXERCISE_NAME)52) +#define FIT_CORE_EXERCISE_NAME_CRISS_CROSS ((FIT_CORE_EXERCISE_NAME)53) +#define FIT_CORE_EXERCISE_NAME_CRISS_CROSS_WITH_BALL ((FIT_CORE_EXERCISE_NAME)54) // Deprecated do not use +#define FIT_CORE_EXERCISE_NAME_DOUBLE_LEG_STRETCH ((FIT_CORE_EXERCISE_NAME)55) +#define FIT_CORE_EXERCISE_NAME_KNEE_FOLDS ((FIT_CORE_EXERCISE_NAME)56) +#define FIT_CORE_EXERCISE_NAME_LOWER_LIFT ((FIT_CORE_EXERCISE_NAME)57) +#define FIT_CORE_EXERCISE_NAME_NECK_PULL ((FIT_CORE_EXERCISE_NAME)58) +#define FIT_CORE_EXERCISE_NAME_PELVIC_CLOCKS ((FIT_CORE_EXERCISE_NAME)59) +#define FIT_CORE_EXERCISE_NAME_ROLL_OVER ((FIT_CORE_EXERCISE_NAME)60) +#define FIT_CORE_EXERCISE_NAME_ROLL_UP ((FIT_CORE_EXERCISE_NAME)61) +#define FIT_CORE_EXERCISE_NAME_ROLLING ((FIT_CORE_EXERCISE_NAME)62) +#define FIT_CORE_EXERCISE_NAME_ROWING_1 ((FIT_CORE_EXERCISE_NAME)63) +#define FIT_CORE_EXERCISE_NAME_ROWING_2 ((FIT_CORE_EXERCISE_NAME)64) +#define FIT_CORE_EXERCISE_NAME_SCISSORS ((FIT_CORE_EXERCISE_NAME)65) +#define FIT_CORE_EXERCISE_NAME_SINGLE_LEG_CIRCLES ((FIT_CORE_EXERCISE_NAME)66) +#define FIT_CORE_EXERCISE_NAME_SINGLE_LEG_STRETCH ((FIT_CORE_EXERCISE_NAME)67) +#define FIT_CORE_EXERCISE_NAME_SNAKE_TWIST_1_AND_2 ((FIT_CORE_EXERCISE_NAME)68) // Deprecated do not use +#define FIT_CORE_EXERCISE_NAME_SWAN ((FIT_CORE_EXERCISE_NAME)69) +#define FIT_CORE_EXERCISE_NAME_SWIMMING ((FIT_CORE_EXERCISE_NAME)70) +#define FIT_CORE_EXERCISE_NAME_TEASER ((FIT_CORE_EXERCISE_NAME)71) +#define FIT_CORE_EXERCISE_NAME_THE_HUNDRED ((FIT_CORE_EXERCISE_NAME)72) +#define FIT_CORE_EXERCISE_NAME_COUNT 73 + +typedef FIT_UINT16 FIT_CRUNCH_EXERCISE_NAME; +#define FIT_CRUNCH_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CRUNCH_EXERCISE_NAME_BICYCLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)0) +#define FIT_CRUNCH_EXERCISE_NAME_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)1) +#define FIT_CRUNCH_EXERCISE_NAME_CIRCULAR_ARM_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)2) +#define FIT_CRUNCH_EXERCISE_NAME_CROSSED_ARMS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)3) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CROSSED_ARMS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)4) +#define FIT_CRUNCH_EXERCISE_NAME_CROSS_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)5) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CROSS_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)6) +#define FIT_CRUNCH_EXERCISE_NAME_CRUNCH_CHOP ((FIT_CRUNCH_EXERCISE_NAME)7) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CRUNCH_CHOP ((FIT_CRUNCH_EXERCISE_NAME)8) +#define FIT_CRUNCH_EXERCISE_NAME_DOUBLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)9) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_DOUBLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)10) +#define FIT_CRUNCH_EXERCISE_NAME_ELBOW_TO_KNEE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)11) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_ELBOW_TO_KNEE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)12) +#define FIT_CRUNCH_EXERCISE_NAME_FLUTTER_KICKS ((FIT_CRUNCH_EXERCISE_NAME)13) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_FLUTTER_KICKS ((FIT_CRUNCH_EXERCISE_NAME)14) +#define FIT_CRUNCH_EXERCISE_NAME_FOAM_ROLLER_REVERSE_CRUNCH_ON_BENCH ((FIT_CRUNCH_EXERCISE_NAME)15) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_FOAM_ROLLER_REVERSE_CRUNCH_ON_BENCH ((FIT_CRUNCH_EXERCISE_NAME)16) +#define FIT_CRUNCH_EXERCISE_NAME_FOAM_ROLLER_REVERSE_CRUNCH_WITH_DUMBBELL ((FIT_CRUNCH_EXERCISE_NAME)17) +#define FIT_CRUNCH_EXERCISE_NAME_FOAM_ROLLER_REVERSE_CRUNCH_WITH_MEDICINE_BALL ((FIT_CRUNCH_EXERCISE_NAME)18) +#define FIT_CRUNCH_EXERCISE_NAME_FROG_PRESS ((FIT_CRUNCH_EXERCISE_NAME)19) +#define FIT_CRUNCH_EXERCISE_NAME_HANGING_KNEE_RAISE_OBLIQUE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)20) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_HANGING_KNEE_RAISE_OBLIQUE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)21) +#define FIT_CRUNCH_EXERCISE_NAME_HIP_CROSSOVER ((FIT_CRUNCH_EXERCISE_NAME)22) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_HIP_CROSSOVER ((FIT_CRUNCH_EXERCISE_NAME)23) +#define FIT_CRUNCH_EXERCISE_NAME_HOLLOW_ROCK ((FIT_CRUNCH_EXERCISE_NAME)24) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_HOLLOW_ROCK ((FIT_CRUNCH_EXERCISE_NAME)25) +#define FIT_CRUNCH_EXERCISE_NAME_INCLINE_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)26) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_INCLINE_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)27) +#define FIT_CRUNCH_EXERCISE_NAME_KNEELING_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)28) +#define FIT_CRUNCH_EXERCISE_NAME_KNEELING_CROSS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)29) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_KNEELING_CROSS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)30) +#define FIT_CRUNCH_EXERCISE_NAME_KNEELING_OBLIQUE_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)31) +#define FIT_CRUNCH_EXERCISE_NAME_KNEES_TO_ELBOW ((FIT_CRUNCH_EXERCISE_NAME)32) +#define FIT_CRUNCH_EXERCISE_NAME_LEG_EXTENSIONS ((FIT_CRUNCH_EXERCISE_NAME)33) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_LEG_EXTENSIONS ((FIT_CRUNCH_EXERCISE_NAME)34) +#define FIT_CRUNCH_EXERCISE_NAME_LEG_LEVERS ((FIT_CRUNCH_EXERCISE_NAME)35) +#define FIT_CRUNCH_EXERCISE_NAME_MCGILL_CURL_UP ((FIT_CRUNCH_EXERCISE_NAME)36) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_MCGILL_CURL_UP ((FIT_CRUNCH_EXERCISE_NAME)37) +#define FIT_CRUNCH_EXERCISE_NAME_MODIFIED_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)38) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_MODIFIED_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)39) +#define FIT_CRUNCH_EXERCISE_NAME_PILATES_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)40) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_PILATES_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)41) +#define FIT_CRUNCH_EXERCISE_NAME_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)42) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_PILATES_ROLL_UP_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)43) +#define FIT_CRUNCH_EXERCISE_NAME_RAISED_LEGS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)44) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_RAISED_LEGS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)45) +#define FIT_CRUNCH_EXERCISE_NAME_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)46) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)47) +#define FIT_CRUNCH_EXERCISE_NAME_REVERSE_CRUNCH_ON_A_BENCH ((FIT_CRUNCH_EXERCISE_NAME)48) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_REVERSE_CRUNCH_ON_A_BENCH ((FIT_CRUNCH_EXERCISE_NAME)49) +#define FIT_CRUNCH_EXERCISE_NAME_REVERSE_CURL_AND_LIFT ((FIT_CRUNCH_EXERCISE_NAME)50) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_REVERSE_CURL_AND_LIFT ((FIT_CRUNCH_EXERCISE_NAME)51) +#define FIT_CRUNCH_EXERCISE_NAME_ROTATIONAL_LIFT ((FIT_CRUNCH_EXERCISE_NAME)52) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_ROTATIONAL_LIFT ((FIT_CRUNCH_EXERCISE_NAME)53) +#define FIT_CRUNCH_EXERCISE_NAME_SEATED_ALTERNATING_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)54) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SEATED_ALTERNATING_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)55) +#define FIT_CRUNCH_EXERCISE_NAME_SEATED_LEG_U ((FIT_CRUNCH_EXERCISE_NAME)56) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SEATED_LEG_U ((FIT_CRUNCH_EXERCISE_NAME)57) +#define FIT_CRUNCH_EXERCISE_NAME_SIDE_TO_SIDE_CRUNCH_AND_WEAVE ((FIT_CRUNCH_EXERCISE_NAME)58) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SIDE_TO_SIDE_CRUNCH_AND_WEAVE ((FIT_CRUNCH_EXERCISE_NAME)59) +#define FIT_CRUNCH_EXERCISE_NAME_SINGLE_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)60) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)61) +#define FIT_CRUNCH_EXERCISE_NAME_SKATER_CRUNCH_CROSS ((FIT_CRUNCH_EXERCISE_NAME)62) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SKATER_CRUNCH_CROSS ((FIT_CRUNCH_EXERCISE_NAME)63) +#define FIT_CRUNCH_EXERCISE_NAME_STANDING_CABLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)64) +#define FIT_CRUNCH_EXERCISE_NAME_STANDING_SIDE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)65) +#define FIT_CRUNCH_EXERCISE_NAME_STEP_CLIMB ((FIT_CRUNCH_EXERCISE_NAME)66) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_STEP_CLIMB ((FIT_CRUNCH_EXERCISE_NAME)67) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)68) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)69) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_REVERSE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)70) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_RUSSIAN_TWIST ((FIT_CRUNCH_EXERCISE_NAME)71) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_RUSSIAN_TWIST ((FIT_CRUNCH_EXERCISE_NAME)72) +#define FIT_CRUNCH_EXERCISE_NAME_SWISS_BALL_SIDE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)73) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_SIDE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)74) +#define FIT_CRUNCH_EXERCISE_NAME_THORACIC_CRUNCHES_ON_FOAM_ROLLER ((FIT_CRUNCH_EXERCISE_NAME)75) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_THORACIC_CRUNCHES_ON_FOAM_ROLLER ((FIT_CRUNCH_EXERCISE_NAME)76) +#define FIT_CRUNCH_EXERCISE_NAME_TRICEPS_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)77) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_BICYCLE_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)78) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)79) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_SWISS_BALL_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)80) +#define FIT_CRUNCH_EXERCISE_NAME_TOES_TO_BAR ((FIT_CRUNCH_EXERCISE_NAME)81) +#define FIT_CRUNCH_EXERCISE_NAME_WEIGHTED_TOES_TO_BAR ((FIT_CRUNCH_EXERCISE_NAME)82) +#define FIT_CRUNCH_EXERCISE_NAME_CRUNCH ((FIT_CRUNCH_EXERCISE_NAME)83) +#define FIT_CRUNCH_EXERCISE_NAME_STRAIGHT_LEG_CRUNCH_WITH_BALL ((FIT_CRUNCH_EXERCISE_NAME)84) +#define FIT_CRUNCH_EXERCISE_NAME_COUNT 85 + +typedef FIT_UINT16 FIT_CURL_EXERCISE_NAME; +#define FIT_CURL_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_CURL_EXERCISE_NAME_ALTERNATING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)0) +#define FIT_CURL_EXERCISE_NAME_ALTERNATING_DUMBBELL_BICEPS_CURL_ON_SWISS_BALL ((FIT_CURL_EXERCISE_NAME)1) +#define FIT_CURL_EXERCISE_NAME_ALTERNATING_INCLINE_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)2) +#define FIT_CURL_EXERCISE_NAME_BARBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)3) +#define FIT_CURL_EXERCISE_NAME_BARBELL_REVERSE_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)4) +#define FIT_CURL_EXERCISE_NAME_BARBELL_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)5) +#define FIT_CURL_EXERCISE_NAME_BEHIND_THE_BACK_BARBELL_REVERSE_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)6) +#define FIT_CURL_EXERCISE_NAME_BEHIND_THE_BACK_ONE_ARM_CABLE_CURL ((FIT_CURL_EXERCISE_NAME)7) +#define FIT_CURL_EXERCISE_NAME_CABLE_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)8) +#define FIT_CURL_EXERCISE_NAME_CABLE_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)9) +#define FIT_CURL_EXERCISE_NAME_CHEATING_BARBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)10) +#define FIT_CURL_EXERCISE_NAME_CLOSE_GRIP_EZ_BAR_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)11) +#define FIT_CURL_EXERCISE_NAME_CROSS_BODY_DUMBBELL_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)12) +#define FIT_CURL_EXERCISE_NAME_DEAD_HANG_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)13) +#define FIT_CURL_EXERCISE_NAME_DECLINE_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)14) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_BICEPS_CURL_WITH_STATIC_HOLD ((FIT_CURL_EXERCISE_NAME)15) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_HAMMER_CURL ((FIT_CURL_EXERCISE_NAME)16) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_REVERSE_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)17) +#define FIT_CURL_EXERCISE_NAME_DUMBBELL_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)18) +#define FIT_CURL_EXERCISE_NAME_EZ_BAR_PREACHER_CURL ((FIT_CURL_EXERCISE_NAME)19) +#define FIT_CURL_EXERCISE_NAME_FORWARD_BEND_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)20) +#define FIT_CURL_EXERCISE_NAME_HAMMER_CURL_TO_PRESS ((FIT_CURL_EXERCISE_NAME)21) +#define FIT_CURL_EXERCISE_NAME_INCLINE_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)22) +#define FIT_CURL_EXERCISE_NAME_INCLINE_OFFSET_THUMB_DUMBBELL_CURL ((FIT_CURL_EXERCISE_NAME)23) +#define FIT_CURL_EXERCISE_NAME_KETTLEBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)24) +#define FIT_CURL_EXERCISE_NAME_LYING_CONCENTRATION_CABLE_CURL ((FIT_CURL_EXERCISE_NAME)25) +#define FIT_CURL_EXERCISE_NAME_ONE_ARM_PREACHER_CURL ((FIT_CURL_EXERCISE_NAME)26) +#define FIT_CURL_EXERCISE_NAME_PLATE_PINCH_CURL ((FIT_CURL_EXERCISE_NAME)27) +#define FIT_CURL_EXERCISE_NAME_PREACHER_CURL_WITH_CABLE ((FIT_CURL_EXERCISE_NAME)28) +#define FIT_CURL_EXERCISE_NAME_REVERSE_EZ_BAR_CURL ((FIT_CURL_EXERCISE_NAME)29) +#define FIT_CURL_EXERCISE_NAME_REVERSE_GRIP_WRIST_CURL ((FIT_CURL_EXERCISE_NAME)30) +#define FIT_CURL_EXERCISE_NAME_REVERSE_GRIP_BARBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)31) +#define FIT_CURL_EXERCISE_NAME_SEATED_ALTERNATING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)32) +#define FIT_CURL_EXERCISE_NAME_SEATED_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)33) +#define FIT_CURL_EXERCISE_NAME_SEATED_REVERSE_DUMBBELL_CURL ((FIT_CURL_EXERCISE_NAME)34) +#define FIT_CURL_EXERCISE_NAME_SPLIT_STANCE_OFFSET_PINKY_DUMBBELL_CURL ((FIT_CURL_EXERCISE_NAME)35) +#define FIT_CURL_EXERCISE_NAME_STANDING_ALTERNATING_DUMBBELL_CURLS ((FIT_CURL_EXERCISE_NAME)36) +#define FIT_CURL_EXERCISE_NAME_STANDING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)37) +#define FIT_CURL_EXERCISE_NAME_STANDING_EZ_BAR_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)38) +#define FIT_CURL_EXERCISE_NAME_STATIC_CURL ((FIT_CURL_EXERCISE_NAME)39) +#define FIT_CURL_EXERCISE_NAME_SWISS_BALL_DUMBBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_CURL_EXERCISE_NAME)40) +#define FIT_CURL_EXERCISE_NAME_SWISS_BALL_EZ_BAR_PREACHER_CURL ((FIT_CURL_EXERCISE_NAME)41) +#define FIT_CURL_EXERCISE_NAME_TWISTING_STANDING_DUMBBELL_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)42) +#define FIT_CURL_EXERCISE_NAME_WIDE_GRIP_EZ_BAR_BICEPS_CURL ((FIT_CURL_EXERCISE_NAME)43) +#define FIT_CURL_EXERCISE_NAME_COUNT 44 + +typedef FIT_UINT16 FIT_DEADLIFT_EXERCISE_NAME; +#define FIT_DEADLIFT_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_DEADLIFT_EXERCISE_NAME_BARBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)0) +#define FIT_DEADLIFT_EXERCISE_NAME_BARBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)1) +#define FIT_DEADLIFT_EXERCISE_NAME_DUMBBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)2) +#define FIT_DEADLIFT_EXERCISE_NAME_DUMBBELL_SINGLE_LEG_DEADLIFT_TO_ROW ((FIT_DEADLIFT_EXERCISE_NAME)3) +#define FIT_DEADLIFT_EXERCISE_NAME_DUMBBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)4) +#define FIT_DEADLIFT_EXERCISE_NAME_KETTLEBELL_FLOOR_TO_SHELF ((FIT_DEADLIFT_EXERCISE_NAME)5) +#define FIT_DEADLIFT_EXERCISE_NAME_ONE_ARM_ONE_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)6) +#define FIT_DEADLIFT_EXERCISE_NAME_RACK_PULL ((FIT_DEADLIFT_EXERCISE_NAME)7) +#define FIT_DEADLIFT_EXERCISE_NAME_ROTATIONAL_DUMBBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)8) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_ARM_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)9) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_BARBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)10) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_BARBELL_STRAIGHT_LEG_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)11) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_DEADLIFT_WITH_BARBELL ((FIT_DEADLIFT_EXERCISE_NAME)12) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_RDL_CIRCUIT ((FIT_DEADLIFT_EXERCISE_NAME)13) +#define FIT_DEADLIFT_EXERCISE_NAME_SINGLE_LEG_ROMANIAN_DEADLIFT_WITH_DUMBBELL ((FIT_DEADLIFT_EXERCISE_NAME)14) +#define FIT_DEADLIFT_EXERCISE_NAME_SUMO_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)15) +#define FIT_DEADLIFT_EXERCISE_NAME_SUMO_DEADLIFT_HIGH_PULL ((FIT_DEADLIFT_EXERCISE_NAME)16) +#define FIT_DEADLIFT_EXERCISE_NAME_TRAP_BAR_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)17) +#define FIT_DEADLIFT_EXERCISE_NAME_WIDE_GRIP_BARBELL_DEADLIFT ((FIT_DEADLIFT_EXERCISE_NAME)18) +#define FIT_DEADLIFT_EXERCISE_NAME_COUNT 19 + +typedef FIT_UINT16 FIT_FLYE_EXERCISE_NAME; +#define FIT_FLYE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_FLYE_EXERCISE_NAME_CABLE_CROSSOVER ((FIT_FLYE_EXERCISE_NAME)0) +#define FIT_FLYE_EXERCISE_NAME_DECLINE_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)1) +#define FIT_FLYE_EXERCISE_NAME_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)2) +#define FIT_FLYE_EXERCISE_NAME_INCLINE_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)3) +#define FIT_FLYE_EXERCISE_NAME_KETTLEBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)4) +#define FIT_FLYE_EXERCISE_NAME_KNEELING_REAR_FLYE ((FIT_FLYE_EXERCISE_NAME)5) +#define FIT_FLYE_EXERCISE_NAME_SINGLE_ARM_STANDING_CABLE_REVERSE_FLYE ((FIT_FLYE_EXERCISE_NAME)6) +#define FIT_FLYE_EXERCISE_NAME_SWISS_BALL_DUMBBELL_FLYE ((FIT_FLYE_EXERCISE_NAME)7) +#define FIT_FLYE_EXERCISE_NAME_ARM_ROTATIONS ((FIT_FLYE_EXERCISE_NAME)8) +#define FIT_FLYE_EXERCISE_NAME_HUG_A_TREE ((FIT_FLYE_EXERCISE_NAME)9) +#define FIT_FLYE_EXERCISE_NAME_COUNT 10 + +typedef FIT_UINT16 FIT_HIP_RAISE_EXERCISE_NAME; +#define FIT_HIP_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HIP_RAISE_EXERCISE_NAME_BARBELL_HIP_THRUST_ON_FLOOR ((FIT_HIP_RAISE_EXERCISE_NAME)0) +#define FIT_HIP_RAISE_EXERCISE_NAME_BARBELL_HIP_THRUST_WITH_BENCH ((FIT_HIP_RAISE_EXERCISE_NAME)1) +#define FIT_HIP_RAISE_EXERCISE_NAME_BENT_KNEE_SWISS_BALL_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)2) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_BENT_KNEE_SWISS_BALL_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)3) +#define FIT_HIP_RAISE_EXERCISE_NAME_BRIDGE_WITH_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)4) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_BRIDGE_WITH_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)5) +#define FIT_HIP_RAISE_EXERCISE_NAME_CLAM_BRIDGE ((FIT_HIP_RAISE_EXERCISE_NAME)6) +#define FIT_HIP_RAISE_EXERCISE_NAME_FRONT_KICK_TABLETOP ((FIT_HIP_RAISE_EXERCISE_NAME)7) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_FRONT_KICK_TABLETOP ((FIT_HIP_RAISE_EXERCISE_NAME)8) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_EXTENSION_AND_CROSS ((FIT_HIP_RAISE_EXERCISE_NAME)9) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_EXTENSION_AND_CROSS ((FIT_HIP_RAISE_EXERCISE_NAME)10) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)11) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)12) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_FEET_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)13) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_FEET_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)14) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)15) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)16) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_HEAD_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)17) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_HEAD_ON_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)18) +#define FIT_HIP_RAISE_EXERCISE_NAME_HIP_RAISE_WITH_KNEE_SQUEEZE ((FIT_HIP_RAISE_EXERCISE_NAME)19) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_HIP_RAISE_WITH_KNEE_SQUEEZE ((FIT_HIP_RAISE_EXERCISE_NAME)20) +#define FIT_HIP_RAISE_EXERCISE_NAME_INCLINE_REAR_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)21) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_INCLINE_REAR_LEG_EXTENSION ((FIT_HIP_RAISE_EXERCISE_NAME)22) +#define FIT_HIP_RAISE_EXERCISE_NAME_KETTLEBELL_SWING ((FIT_HIP_RAISE_EXERCISE_NAME)23) +#define FIT_HIP_RAISE_EXERCISE_NAME_MARCHING_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)24) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_MARCHING_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)25) +#define FIT_HIP_RAISE_EXERCISE_NAME_MARCHING_HIP_RAISE_WITH_FEET_ON_A_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)26) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_MARCHING_HIP_RAISE_WITH_FEET_ON_A_SWISS_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)27) +#define FIT_HIP_RAISE_EXERCISE_NAME_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)28) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_REVERSE_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)29) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)30) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE ((FIT_HIP_RAISE_EXERCISE_NAME)31) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BENCH ((FIT_HIP_RAISE_EXERCISE_NAME)32) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BENCH ((FIT_HIP_RAISE_EXERCISE_NAME)33) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)34) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)35) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_FOAM_ROLLER ((FIT_HIP_RAISE_EXERCISE_NAME)36) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_FOAM_ROLLER ((FIT_HIP_RAISE_EXERCISE_NAME)37) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_MEDICINE_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)38) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_FOOT_ON_MEDICINE_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)39) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)40) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_HIP_RAISE_WITH_HEAD_ON_BOSU_BALL ((FIT_HIP_RAISE_EXERCISE_NAME)41) +#define FIT_HIP_RAISE_EXERCISE_NAME_WEIGHTED_CLAM_BRIDGE ((FIT_HIP_RAISE_EXERCISE_NAME)42) +#define FIT_HIP_RAISE_EXERCISE_NAME_SINGLE_LEG_SWISS_BALL_HIP_RAISE_AND_LEG_CURL ((FIT_HIP_RAISE_EXERCISE_NAME)43) +#define FIT_HIP_RAISE_EXERCISE_NAME_CLAMS ((FIT_HIP_RAISE_EXERCISE_NAME)44) +#define FIT_HIP_RAISE_EXERCISE_NAME_INNER_THIGH_CIRCLES ((FIT_HIP_RAISE_EXERCISE_NAME)45) // Deprecated do not use +#define FIT_HIP_RAISE_EXERCISE_NAME_INNER_THIGH_SIDE_LIFT ((FIT_HIP_RAISE_EXERCISE_NAME)46) // Deprecated do not use +#define FIT_HIP_RAISE_EXERCISE_NAME_LEG_CIRCLES ((FIT_HIP_RAISE_EXERCISE_NAME)47) +#define FIT_HIP_RAISE_EXERCISE_NAME_LEG_LIFT ((FIT_HIP_RAISE_EXERCISE_NAME)48) +#define FIT_HIP_RAISE_EXERCISE_NAME_LEG_LIFT_IN_EXTERNAL_ROTATION ((FIT_HIP_RAISE_EXERCISE_NAME)49) +#define FIT_HIP_RAISE_EXERCISE_NAME_COUNT 50 + +typedef FIT_UINT16 FIT_HIP_STABILITY_EXERCISE_NAME; +#define FIT_HIP_STABILITY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HIP_STABILITY_EXERCISE_NAME_BAND_SIDE_LYING_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)0) +#define FIT_HIP_STABILITY_EXERCISE_NAME_DEAD_BUG ((FIT_HIP_STABILITY_EXERCISE_NAME)1) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_DEAD_BUG ((FIT_HIP_STABILITY_EXERCISE_NAME)2) +#define FIT_HIP_STABILITY_EXERCISE_NAME_EXTERNAL_HIP_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)3) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_EXTERNAL_HIP_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)4) +#define FIT_HIP_STABILITY_EXERCISE_NAME_FIRE_HYDRANT_KICKS ((FIT_HIP_STABILITY_EXERCISE_NAME)5) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_FIRE_HYDRANT_KICKS ((FIT_HIP_STABILITY_EXERCISE_NAME)6) +#define FIT_HIP_STABILITY_EXERCISE_NAME_HIP_CIRCLES ((FIT_HIP_STABILITY_EXERCISE_NAME)7) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_HIP_CIRCLES ((FIT_HIP_STABILITY_EXERCISE_NAME)8) +#define FIT_HIP_STABILITY_EXERCISE_NAME_INNER_THIGH_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)9) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_INNER_THIGH_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)10) +#define FIT_HIP_STABILITY_EXERCISE_NAME_LATERAL_WALKS_WITH_BAND_AT_ANKLES ((FIT_HIP_STABILITY_EXERCISE_NAME)11) +#define FIT_HIP_STABILITY_EXERCISE_NAME_PRETZEL_SIDE_KICK ((FIT_HIP_STABILITY_EXERCISE_NAME)12) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_PRETZEL_SIDE_KICK ((FIT_HIP_STABILITY_EXERCISE_NAME)13) +#define FIT_HIP_STABILITY_EXERCISE_NAME_PRONE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)14) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_PRONE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)15) +#define FIT_HIP_STABILITY_EXERCISE_NAME_QUADRUPED ((FIT_HIP_STABILITY_EXERCISE_NAME)16) +#define FIT_HIP_STABILITY_EXERCISE_NAME_QUADRUPED_HIP_EXTENSION ((FIT_HIP_STABILITY_EXERCISE_NAME)17) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_QUADRUPED_HIP_EXTENSION ((FIT_HIP_STABILITY_EXERCISE_NAME)18) +#define FIT_HIP_STABILITY_EXERCISE_NAME_QUADRUPED_WITH_LEG_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)19) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_QUADRUPED_WITH_LEG_LIFT ((FIT_HIP_STABILITY_EXERCISE_NAME)20) +#define FIT_HIP_STABILITY_EXERCISE_NAME_SIDE_LYING_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)21) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_SIDE_LYING_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)22) +#define FIT_HIP_STABILITY_EXERCISE_NAME_SLIDING_HIP_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)23) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_SLIDING_HIP_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)24) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)25) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_STANDING_ADDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)26) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_CABLE_HIP_ABDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)27) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_HIP_ABDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)28) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_STANDING_HIP_ABDUCTION ((FIT_HIP_STABILITY_EXERCISE_NAME)29) +#define FIT_HIP_STABILITY_EXERCISE_NAME_STANDING_REAR_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)30) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_STANDING_REAR_LEG_RAISE ((FIT_HIP_STABILITY_EXERCISE_NAME)31) +#define FIT_HIP_STABILITY_EXERCISE_NAME_SUPINE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)32) +#define FIT_HIP_STABILITY_EXERCISE_NAME_WEIGHTED_SUPINE_HIP_INTERNAL_ROTATION ((FIT_HIP_STABILITY_EXERCISE_NAME)33) +#define FIT_HIP_STABILITY_EXERCISE_NAME_COUNT 34 + +typedef FIT_UINT16 FIT_HIP_SWING_EXERCISE_NAME; +#define FIT_HIP_SWING_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HIP_SWING_EXERCISE_NAME_SINGLE_ARM_KETTLEBELL_SWING ((FIT_HIP_SWING_EXERCISE_NAME)0) +#define FIT_HIP_SWING_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_SWING ((FIT_HIP_SWING_EXERCISE_NAME)1) +#define FIT_HIP_SWING_EXERCISE_NAME_STEP_OUT_SWING ((FIT_HIP_SWING_EXERCISE_NAME)2) +#define FIT_HIP_SWING_EXERCISE_NAME_COUNT 3 + +typedef FIT_UINT16 FIT_HYPEREXTENSION_EXERCISE_NAME; +#define FIT_HYPEREXTENSION_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_HYPEREXTENSION_EXERCISE_NAME_BACK_EXTENSION_WITH_OPPOSITE_ARM_AND_LEG_REACH ((FIT_HYPEREXTENSION_EXERCISE_NAME)0) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_BACK_EXTENSION_WITH_OPPOSITE_ARM_AND_LEG_REACH ((FIT_HYPEREXTENSION_EXERCISE_NAME)1) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_BASE_ROTATIONS ((FIT_HYPEREXTENSION_EXERCISE_NAME)2) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_BASE_ROTATIONS ((FIT_HYPEREXTENSION_EXERCISE_NAME)3) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_BENT_KNEE_REVERSE_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)4) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_BENT_KNEE_REVERSE_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)5) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_HOLLOW_HOLD_AND_ROLL ((FIT_HYPEREXTENSION_EXERCISE_NAME)6) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_HOLLOW_HOLD_AND_ROLL ((FIT_HYPEREXTENSION_EXERCISE_NAME)7) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_KICKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)8) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_KICKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)9) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_KNEE_RAISES ((FIT_HYPEREXTENSION_EXERCISE_NAME)10) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_KNEE_RAISES ((FIT_HYPEREXTENSION_EXERCISE_NAME)11) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_KNEELING_SUPERMAN ((FIT_HYPEREXTENSION_EXERCISE_NAME)12) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_KNEELING_SUPERMAN ((FIT_HYPEREXTENSION_EXERCISE_NAME)13) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_LAT_PULL_DOWN_WITH_ROW ((FIT_HYPEREXTENSION_EXERCISE_NAME)14) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_MEDICINE_BALL_DEADLIFT_TO_REACH ((FIT_HYPEREXTENSION_EXERCISE_NAME)15) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_ONE_ARM_ONE_LEG_ROW ((FIT_HYPEREXTENSION_EXERCISE_NAME)16) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_ONE_ARM_ROW_WITH_BAND ((FIT_HYPEREXTENSION_EXERCISE_NAME)17) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_OVERHEAD_LUNGE_WITH_MEDICINE_BALL ((FIT_HYPEREXTENSION_EXERCISE_NAME)18) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_PLANK_KNEE_TUCKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)19) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_PLANK_KNEE_TUCKS ((FIT_HYPEREXTENSION_EXERCISE_NAME)20) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SIDE_STEP ((FIT_HYPEREXTENSION_EXERCISE_NAME)21) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SIDE_STEP ((FIT_HYPEREXTENSION_EXERCISE_NAME)22) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SINGLE_LEG_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)23) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)24) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SPINE_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)25) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SPINE_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)26) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_STATIC_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)27) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_STATIC_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)28) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SUPERMAN_FROM_FLOOR ((FIT_HYPEREXTENSION_EXERCISE_NAME)29) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SUPERMAN_FROM_FLOOR ((FIT_HYPEREXTENSION_EXERCISE_NAME)30) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SWISS_BALL_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)31) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SWISS_BALL_BACK_EXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)32) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SWISS_BALL_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)33) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SWISS_BALL_HYPEREXTENSION ((FIT_HYPEREXTENSION_EXERCISE_NAME)34) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SWISS_BALL_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_HYPEREXTENSION_EXERCISE_NAME)35) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_WEIGHTED_SWISS_BALL_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_HYPEREXTENSION_EXERCISE_NAME)36) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SUPERMAN_ON_SWISS_BALL ((FIT_HYPEREXTENSION_EXERCISE_NAME)37) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_COBRA ((FIT_HYPEREXTENSION_EXERCISE_NAME)38) +#define FIT_HYPEREXTENSION_EXERCISE_NAME_SUPINE_FLOOR_BARRE ((FIT_HYPEREXTENSION_EXERCISE_NAME)39) // Deprecated do not use +#define FIT_HYPEREXTENSION_EXERCISE_NAME_COUNT 40 + +typedef FIT_UINT16 FIT_LATERAL_RAISE_EXERCISE_NAME; +#define FIT_LATERAL_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LATERAL_RAISE_EXERCISE_NAME_45_DEGREE_CABLE_EXTERNAL_ROTATION ((FIT_LATERAL_RAISE_EXERCISE_NAME)0) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ALTERNATING_LATERAL_RAISE_WITH_STATIC_HOLD ((FIT_LATERAL_RAISE_EXERCISE_NAME)1) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_BAR_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)2) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_BENT_OVER_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)3) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_CABLE_DIAGONAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)4) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_CABLE_FRONT_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)5) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_CALORIE_ROW ((FIT_LATERAL_RAISE_EXERCISE_NAME)6) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_COMBO_SHOULDER_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)7) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_DUMBBELL_DIAGONAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)8) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_DUMBBELL_V_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)9) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_FRONT_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)10) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_LEANING_DUMBBELL_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)11) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_LYING_DUMBBELL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)12) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)13) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ONE_ARM_CABLE_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)14) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_OVERHAND_GRIP_REAR_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)15) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_PLATE_RAISES ((FIT_LATERAL_RAISE_EXERCISE_NAME)16) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_RING_DIP ((FIT_LATERAL_RAISE_EXERCISE_NAME)17) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_RING_DIP ((FIT_LATERAL_RAISE_EXERCISE_NAME)18) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_RING_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)19) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_RING_MUSCLE_UP ((FIT_LATERAL_RAISE_EXERCISE_NAME)20) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ROPE_CLIMB ((FIT_LATERAL_RAISE_EXERCISE_NAME)21) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_ROPE_CLIMB ((FIT_LATERAL_RAISE_EXERCISE_NAME)22) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SCAPTION ((FIT_LATERAL_RAISE_EXERCISE_NAME)23) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SEATED_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)24) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SEATED_REAR_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)25) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SIDE_LYING_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)26) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_STANDING_LIFT ((FIT_LATERAL_RAISE_EXERCISE_NAME)27) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SUSPENDED_ROW ((FIT_LATERAL_RAISE_EXERCISE_NAME)28) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_UNDERHAND_GRIP_REAR_LATERAL_RAISE ((FIT_LATERAL_RAISE_EXERCISE_NAME)29) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WALL_SLIDE ((FIT_LATERAL_RAISE_EXERCISE_NAME)30) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_WEIGHTED_WALL_SLIDE ((FIT_LATERAL_RAISE_EXERCISE_NAME)31) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_ARM_CIRCLES ((FIT_LATERAL_RAISE_EXERCISE_NAME)32) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_SHAVING_THE_HEAD ((FIT_LATERAL_RAISE_EXERCISE_NAME)33) +#define FIT_LATERAL_RAISE_EXERCISE_NAME_COUNT 34 + +typedef FIT_UINT16 FIT_LEG_CURL_EXERCISE_NAME; +#define FIT_LEG_CURL_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LEG_CURL_EXERCISE_NAME_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)0) +#define FIT_LEG_CURL_EXERCISE_NAME_WEIGHTED_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)1) +#define FIT_LEG_CURL_EXERCISE_NAME_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)2) +#define FIT_LEG_CURL_EXERCISE_NAME_SEATED_BARBELL_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)3) +#define FIT_LEG_CURL_EXERCISE_NAME_SINGLE_LEG_BARBELL_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)4) +#define FIT_LEG_CURL_EXERCISE_NAME_SINGLE_LEG_SLIDING_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)5) +#define FIT_LEG_CURL_EXERCISE_NAME_SLIDING_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)6) +#define FIT_LEG_CURL_EXERCISE_NAME_SPLIT_BARBELL_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)7) +#define FIT_LEG_CURL_EXERCISE_NAME_SPLIT_STANCE_EXTENSION ((FIT_LEG_CURL_EXERCISE_NAME)8) +#define FIT_LEG_CURL_EXERCISE_NAME_STAGGERED_STANCE_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)9) +#define FIT_LEG_CURL_EXERCISE_NAME_SWISS_BALL_HIP_RAISE_AND_LEG_CURL ((FIT_LEG_CURL_EXERCISE_NAME)10) +#define FIT_LEG_CURL_EXERCISE_NAME_ZERCHER_GOOD_MORNING ((FIT_LEG_CURL_EXERCISE_NAME)11) +#define FIT_LEG_CURL_EXERCISE_NAME_COUNT 12 + +typedef FIT_UINT16 FIT_LEG_RAISE_EXERCISE_NAME; +#define FIT_LEG_RAISE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LEG_RAISE_EXERCISE_NAME_HANGING_KNEE_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)0) +#define FIT_LEG_RAISE_EXERCISE_NAME_HANGING_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)1) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_HANGING_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)2) +#define FIT_LEG_RAISE_EXERCISE_NAME_HANGING_SINGLE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)3) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_HANGING_SINGLE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)4) +#define FIT_LEG_RAISE_EXERCISE_NAME_KETTLEBELL_LEG_RAISES ((FIT_LEG_RAISE_EXERCISE_NAME)5) +#define FIT_LEG_RAISE_EXERCISE_NAME_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)6) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)7) +#define FIT_LEG_RAISE_EXERCISE_NAME_LYING_STRAIGHT_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)8) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_LYING_STRAIGHT_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)9) +#define FIT_LEG_RAISE_EXERCISE_NAME_MEDICINE_BALL_LEG_DROPS ((FIT_LEG_RAISE_EXERCISE_NAME)10) +#define FIT_LEG_RAISE_EXERCISE_NAME_QUADRUPED_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)11) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_QUADRUPED_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)12) +#define FIT_LEG_RAISE_EXERCISE_NAME_REVERSE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)13) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_REVERSE_LEG_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)14) +#define FIT_LEG_RAISE_EXERCISE_NAME_REVERSE_LEG_RAISE_ON_SWISS_BALL ((FIT_LEG_RAISE_EXERCISE_NAME)15) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_REVERSE_LEG_RAISE_ON_SWISS_BALL ((FIT_LEG_RAISE_EXERCISE_NAME)16) +#define FIT_LEG_RAISE_EXERCISE_NAME_SINGLE_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)17) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_LOWERING_DRILL ((FIT_LEG_RAISE_EXERCISE_NAME)18) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_HANGING_KNEE_RAISE ((FIT_LEG_RAISE_EXERCISE_NAME)19) +#define FIT_LEG_RAISE_EXERCISE_NAME_LATERAL_STEPOVER ((FIT_LEG_RAISE_EXERCISE_NAME)20) +#define FIT_LEG_RAISE_EXERCISE_NAME_WEIGHTED_LATERAL_STEPOVER ((FIT_LEG_RAISE_EXERCISE_NAME)21) +#define FIT_LEG_RAISE_EXERCISE_NAME_COUNT 22 + +typedef FIT_UINT16 FIT_LUNGE_EXERCISE_NAME; +#define FIT_LUNGE_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_LUNGE ((FIT_LUNGE_EXERCISE_NAME)0) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_MATRIX ((FIT_LUNGE_EXERCISE_NAME)1) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_LUNGE_MATRIX ((FIT_LUNGE_EXERCISE_NAME)2) +#define FIT_LUNGE_EXERCISE_NAME_ALTERNATING_BARBELL_FORWARD_LUNGE ((FIT_LUNGE_EXERCISE_NAME)3) +#define FIT_LUNGE_EXERCISE_NAME_ALTERNATING_DUMBBELL_LUNGE_WITH_REACH ((FIT_LUNGE_EXERCISE_NAME)4) +#define FIT_LUNGE_EXERCISE_NAME_BACK_FOOT_ELEVATED_DUMBBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)5) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)6) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)7) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)8) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_FRONT_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)9) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)10) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_REVERSE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)11) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)12) +#define FIT_LUNGE_EXERCISE_NAME_BARBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)13) +#define FIT_LUNGE_EXERCISE_NAME_CORE_CONTROL_REAR_LUNGE ((FIT_LUNGE_EXERCISE_NAME)14) +#define FIT_LUNGE_EXERCISE_NAME_DIAGONAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)15) +#define FIT_LUNGE_EXERCISE_NAME_DROP_LUNGE ((FIT_LUNGE_EXERCISE_NAME)16) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)17) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)18) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)19) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_DIAGONAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)20) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)21) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_LUNGE_AND_ROTATION ((FIT_LUNGE_EXERCISE_NAME)22) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_OVERHEAD_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)23) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_REVERSE_LUNGE_TO_HIGH_KNEE_AND_PRESS ((FIT_LUNGE_EXERCISE_NAME)24) +#define FIT_LUNGE_EXERCISE_NAME_DUMBBELL_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)25) +#define FIT_LUNGE_EXERCISE_NAME_ELEVATED_FRONT_FOOT_BARBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)26) +#define FIT_LUNGE_EXERCISE_NAME_FRONT_FOOT_ELEVATED_DUMBBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)27) +#define FIT_LUNGE_EXERCISE_NAME_GUNSLINGER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)28) +#define FIT_LUNGE_EXERCISE_NAME_LAWNMOWER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)29) +#define FIT_LUNGE_EXERCISE_NAME_LOW_LUNGE_WITH_ISOMETRIC_ADDUCTION ((FIT_LUNGE_EXERCISE_NAME)30) +#define FIT_LUNGE_EXERCISE_NAME_LOW_SIDE_TO_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)31) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE ((FIT_LUNGE_EXERCISE_NAME)32) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_LUNGE ((FIT_LUNGE_EXERCISE_NAME)33) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_WITH_ARM_REACH ((FIT_LUNGE_EXERCISE_NAME)34) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_WITH_DIAGONAL_REACH ((FIT_LUNGE_EXERCISE_NAME)35) +#define FIT_LUNGE_EXERCISE_NAME_LUNGE_WITH_SIDE_BEND ((FIT_LUNGE_EXERCISE_NAME)36) +#define FIT_LUNGE_EXERCISE_NAME_OFFSET_DUMBBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)37) +#define FIT_LUNGE_EXERCISE_NAME_OFFSET_DUMBBELL_REVERSE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)38) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_BULGARIAN_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)39) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_DUMBBELL_REVERSE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)40) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_DUMBBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)41) +#define FIT_LUNGE_EXERCISE_NAME_OVERHEAD_LUNGE_WITH_ROTATION ((FIT_LUNGE_EXERCISE_NAME)42) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_BARBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)43) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)44) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_DUMBBELL_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)45) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_DUMBBELL_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)46) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_DUMBBELL_DIAGONAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)47) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_LUNGE_WITH_REACH_BACK ((FIT_LUNGE_EXERCISE_NAME)48) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_LUNGE_WITH_REACH_BACK ((FIT_LUNGE_EXERCISE_NAME)49) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_LUNGE_WITH_TWIST_AND_OVERHEAD_REACH ((FIT_LUNGE_EXERCISE_NAME)50) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_LUNGE_WITH_TWIST_AND_OVERHEAD_REACH ((FIT_LUNGE_EXERCISE_NAME)51) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_SLIDING_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)52) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_SLIDING_BOX_LUNGE ((FIT_LUNGE_EXERCISE_NAME)53) +#define FIT_LUNGE_EXERCISE_NAME_REVERSE_SLIDING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)54) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_REVERSE_SLIDING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)55) +#define FIT_LUNGE_EXERCISE_NAME_RUNNERS_LUNGE_TO_BALANCE ((FIT_LUNGE_EXERCISE_NAME)56) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_RUNNERS_LUNGE_TO_BALANCE ((FIT_LUNGE_EXERCISE_NAME)57) +#define FIT_LUNGE_EXERCISE_NAME_SHIFTING_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)58) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_AND_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)59) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_AND_CROSSOVER_LUNGE ((FIT_LUNGE_EXERCISE_NAME)60) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)61) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_LUNGE ((FIT_LUNGE_EXERCISE_NAME)62) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_AND_PRESS ((FIT_LUNGE_EXERCISE_NAME)63) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_JUMP_OFF ((FIT_LUNGE_EXERCISE_NAME)64) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_SWEEP ((FIT_LUNGE_EXERCISE_NAME)65) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_LUNGE_SWEEP ((FIT_LUNGE_EXERCISE_NAME)66) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_LUNGE_TO_CROSSOVER_TAP ((FIT_LUNGE_EXERCISE_NAME)67) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_LUNGE_TO_CROSSOVER_TAP ((FIT_LUNGE_EXERCISE_NAME)68) +#define FIT_LUNGE_EXERCISE_NAME_SIDE_TO_SIDE_LUNGE_CHOPS ((FIT_LUNGE_EXERCISE_NAME)69) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIDE_TO_SIDE_LUNGE_CHOPS ((FIT_LUNGE_EXERCISE_NAME)70) +#define FIT_LUNGE_EXERCISE_NAME_SIFF_JUMP_LUNGE ((FIT_LUNGE_EXERCISE_NAME)71) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SIFF_JUMP_LUNGE ((FIT_LUNGE_EXERCISE_NAME)72) +#define FIT_LUNGE_EXERCISE_NAME_SINGLE_ARM_REVERSE_LUNGE_AND_PRESS ((FIT_LUNGE_EXERCISE_NAME)73) +#define FIT_LUNGE_EXERCISE_NAME_SLIDING_LATERAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)74) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_SLIDING_LATERAL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)75) +#define FIT_LUNGE_EXERCISE_NAME_WALKING_BARBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)76) +#define FIT_LUNGE_EXERCISE_NAME_WALKING_DUMBBELL_LUNGE ((FIT_LUNGE_EXERCISE_NAME)77) +#define FIT_LUNGE_EXERCISE_NAME_WALKING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)78) +#define FIT_LUNGE_EXERCISE_NAME_WEIGHTED_WALKING_LUNGE ((FIT_LUNGE_EXERCISE_NAME)79) +#define FIT_LUNGE_EXERCISE_NAME_WIDE_GRIP_OVERHEAD_BARBELL_SPLIT_SQUAT ((FIT_LUNGE_EXERCISE_NAME)80) +#define FIT_LUNGE_EXERCISE_NAME_COUNT 81 + +typedef FIT_UINT16 FIT_OLYMPIC_LIFT_EXERCISE_NAME; +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_POWER_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)0) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_SQUAT_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)1) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_POWER_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)2) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_POWER_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)3) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_SQUAT_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)4) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_CLEAN_AND_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)5) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_POWER_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)6) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HANG_PULL ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)7) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_HIGH_PULL ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)8) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)9) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_BARBELL_SPLIT_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)10) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)11) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_DUMBBELL_CLEAN ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)12) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_DUMBBELL_HANG_PULL ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)13) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_ONE_HAND_DUMBBELL_SPLIT_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)14) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_PUSH_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)15) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)16) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SINGLE_ARM_HANG_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)17) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SINGLE_ARM_KETTLEBELL_SNATCH ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)18) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SPLIT_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)19) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_SQUAT_CLEAN_AND_JERK ((FIT_OLYMPIC_LIFT_EXERCISE_NAME)20) +#define FIT_OLYMPIC_LIFT_EXERCISE_NAME_COUNT 21 + +typedef FIT_UINT16 FIT_PLANK_EXERCISE_NAME; +#define FIT_PLANK_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PLANK_EXERCISE_NAME_45_DEGREE_PLANK ((FIT_PLANK_EXERCISE_NAME)0) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_45_DEGREE_PLANK ((FIT_PLANK_EXERCISE_NAME)1) +#define FIT_PLANK_EXERCISE_NAME_90_DEGREE_STATIC_HOLD ((FIT_PLANK_EXERCISE_NAME)2) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_90_DEGREE_STATIC_HOLD ((FIT_PLANK_EXERCISE_NAME)3) +#define FIT_PLANK_EXERCISE_NAME_BEAR_CRAWL ((FIT_PLANK_EXERCISE_NAME)4) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_BEAR_CRAWL ((FIT_PLANK_EXERCISE_NAME)5) +#define FIT_PLANK_EXERCISE_NAME_CROSS_BODY_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)6) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_CROSS_BODY_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)7) +#define FIT_PLANK_EXERCISE_NAME_ELBOW_PLANK_PIKE_JACKS ((FIT_PLANK_EXERCISE_NAME)8) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ELBOW_PLANK_PIKE_JACKS ((FIT_PLANK_EXERCISE_NAME)9) +#define FIT_PLANK_EXERCISE_NAME_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)10) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)11) +#define FIT_PLANK_EXERCISE_NAME_ELEVATOR_ABS ((FIT_PLANK_EXERCISE_NAME)12) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ELEVATOR_ABS ((FIT_PLANK_EXERCISE_NAME)13) +#define FIT_PLANK_EXERCISE_NAME_EXTENDED_PLANK ((FIT_PLANK_EXERCISE_NAME)14) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_EXTENDED_PLANK ((FIT_PLANK_EXERCISE_NAME)15) +#define FIT_PLANK_EXERCISE_NAME_FULL_PLANK_PASSE_TWIST ((FIT_PLANK_EXERCISE_NAME)16) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_FULL_PLANK_PASSE_TWIST ((FIT_PLANK_EXERCISE_NAME)17) +#define FIT_PLANK_EXERCISE_NAME_INCHING_ELBOW_PLANK ((FIT_PLANK_EXERCISE_NAME)18) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_INCHING_ELBOW_PLANK ((FIT_PLANK_EXERCISE_NAME)19) +#define FIT_PLANK_EXERCISE_NAME_INCHWORM_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)20) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_INCHWORM_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)21) +#define FIT_PLANK_EXERCISE_NAME_KNEELING_PLANK ((FIT_PLANK_EXERCISE_NAME)22) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_KNEELING_PLANK ((FIT_PLANK_EXERCISE_NAME)23) +#define FIT_PLANK_EXERCISE_NAME_KNEELING_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)24) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_KNEELING_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)25) +#define FIT_PLANK_EXERCISE_NAME_LATERAL_ROLL ((FIT_PLANK_EXERCISE_NAME)26) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_LATERAL_ROLL ((FIT_PLANK_EXERCISE_NAME)27) +#define FIT_PLANK_EXERCISE_NAME_LYING_REVERSE_PLANK ((FIT_PLANK_EXERCISE_NAME)28) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_LYING_REVERSE_PLANK ((FIT_PLANK_EXERCISE_NAME)29) +#define FIT_PLANK_EXERCISE_NAME_MEDICINE_BALL_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)30) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MEDICINE_BALL_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)31) +#define FIT_PLANK_EXERCISE_NAME_MODIFIED_MOUNTAIN_CLIMBER_AND_EXTENSION ((FIT_PLANK_EXERCISE_NAME)32) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MODIFIED_MOUNTAIN_CLIMBER_AND_EXTENSION ((FIT_PLANK_EXERCISE_NAME)33) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)34) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER ((FIT_PLANK_EXERCISE_NAME)35) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)36) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)37) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_WITH_FEET_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)38) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_WITH_FEET_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)39) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_WITH_HANDS_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)40) +#define FIT_PLANK_EXERCISE_NAME_MOUNTAIN_CLIMBER_WITH_HANDS_ON_SWISS_BALL ((FIT_PLANK_EXERCISE_NAME)41) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_WITH_HANDS_ON_SWISS_BALL ((FIT_PLANK_EXERCISE_NAME)42) +#define FIT_PLANK_EXERCISE_NAME_PLANK ((FIT_PLANK_EXERCISE_NAME)43) +#define FIT_PLANK_EXERCISE_NAME_PLANK_JACKS_WITH_FEET_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)44) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_JACKS_WITH_FEET_ON_SLIDING_DISCS ((FIT_PLANK_EXERCISE_NAME)45) +#define FIT_PLANK_EXERCISE_NAME_PLANK_KNEE_TWIST ((FIT_PLANK_EXERCISE_NAME)46) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_KNEE_TWIST ((FIT_PLANK_EXERCISE_NAME)47) +#define FIT_PLANK_EXERCISE_NAME_PLANK_PIKE_JUMPS ((FIT_PLANK_EXERCISE_NAME)48) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_PIKE_JUMPS ((FIT_PLANK_EXERCISE_NAME)49) +#define FIT_PLANK_EXERCISE_NAME_PLANK_PIKES ((FIT_PLANK_EXERCISE_NAME)50) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_PIKES ((FIT_PLANK_EXERCISE_NAME)51) +#define FIT_PLANK_EXERCISE_NAME_PLANK_TO_STAND_UP ((FIT_PLANK_EXERCISE_NAME)52) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_TO_STAND_UP ((FIT_PLANK_EXERCISE_NAME)53) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_ARM_RAISE ((FIT_PLANK_EXERCISE_NAME)54) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_WITH_ARM_RAISE ((FIT_PLANK_EXERCISE_NAME)55) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_KNEE_TO_ELBOW ((FIT_PLANK_EXERCISE_NAME)56) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_WITH_KNEE_TO_ELBOW ((FIT_PLANK_EXERCISE_NAME)57) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_OBLIQUE_CRUNCH ((FIT_PLANK_EXERCISE_NAME)58) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK_WITH_OBLIQUE_CRUNCH ((FIT_PLANK_EXERCISE_NAME)59) +#define FIT_PLANK_EXERCISE_NAME_PLYOMETRIC_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)60) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLYOMETRIC_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)61) +#define FIT_PLANK_EXERCISE_NAME_ROLLING_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)62) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_ROLLING_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)63) +#define FIT_PLANK_EXERCISE_NAME_SIDE_KICK_PLANK ((FIT_PLANK_EXERCISE_NAME)64) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_KICK_PLANK ((FIT_PLANK_EXERCISE_NAME)65) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)66) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)67) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_AND_ROW ((FIT_PLANK_EXERCISE_NAME)68) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_AND_ROW ((FIT_PLANK_EXERCISE_NAME)69) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_LIFT ((FIT_PLANK_EXERCISE_NAME)70) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_LIFT ((FIT_PLANK_EXERCISE_NAME)71) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_ELBOW_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)72) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_ELBOW_ON_BOSU_BALL ((FIT_PLANK_EXERCISE_NAME)73) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)74) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)75) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_KNEE_CIRCLE ((FIT_PLANK_EXERCISE_NAME)76) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_KNEE_CIRCLE ((FIT_PLANK_EXERCISE_NAME)77) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_KNEE_TUCK ((FIT_PLANK_EXERCISE_NAME)78) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_KNEE_TUCK ((FIT_PLANK_EXERCISE_NAME)79) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)80) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)81) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_WITH_REACH_UNDER ((FIT_PLANK_EXERCISE_NAME)82) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SIDE_PLANK_WITH_REACH_UNDER ((FIT_PLANK_EXERCISE_NAME)83) +#define FIT_PLANK_EXERCISE_NAME_SINGLE_LEG_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)84) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_ELEVATED_FEET_PLANK ((FIT_PLANK_EXERCISE_NAME)85) +#define FIT_PLANK_EXERCISE_NAME_SINGLE_LEG_FLEX_AND_EXTEND ((FIT_PLANK_EXERCISE_NAME)86) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_FLEX_AND_EXTEND ((FIT_PLANK_EXERCISE_NAME)87) +#define FIT_PLANK_EXERCISE_NAME_SINGLE_LEG_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)88) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)89) +#define FIT_PLANK_EXERCISE_NAME_SPIDERMAN_PLANK ((FIT_PLANK_EXERCISE_NAME)90) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SPIDERMAN_PLANK ((FIT_PLANK_EXERCISE_NAME)91) +#define FIT_PLANK_EXERCISE_NAME_STRAIGHT_ARM_PLANK ((FIT_PLANK_EXERCISE_NAME)92) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_STRAIGHT_ARM_PLANK ((FIT_PLANK_EXERCISE_NAME)93) +#define FIT_PLANK_EXERCISE_NAME_STRAIGHT_ARM_PLANK_WITH_SHOULDER_TOUCH ((FIT_PLANK_EXERCISE_NAME)94) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_STRAIGHT_ARM_PLANK_WITH_SHOULDER_TOUCH ((FIT_PLANK_EXERCISE_NAME)95) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK ((FIT_PLANK_EXERCISE_NAME)96) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK ((FIT_PLANK_EXERCISE_NAME)97) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)98) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)99) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK_LEG_LIFT_AND_HOLD ((FIT_PLANK_EXERCISE_NAME)100) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)101) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK_WITH_FEET_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)102) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_PRONE_JACKKNIFE ((FIT_PLANK_EXERCISE_NAME)103) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PRONE_JACKKNIFE ((FIT_PLANK_EXERCISE_NAME)104) +#define FIT_PLANK_EXERCISE_NAME_SWISS_BALL_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)105) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)106) +#define FIT_PLANK_EXERCISE_NAME_THREE_WAY_PLANK ((FIT_PLANK_EXERCISE_NAME)107) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_THREE_WAY_PLANK ((FIT_PLANK_EXERCISE_NAME)108) +#define FIT_PLANK_EXERCISE_NAME_TOWEL_PLANK_AND_KNEE_IN ((FIT_PLANK_EXERCISE_NAME)109) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_TOWEL_PLANK_AND_KNEE_IN ((FIT_PLANK_EXERCISE_NAME)110) +#define FIT_PLANK_EXERCISE_NAME_T_STABILIZATION ((FIT_PLANK_EXERCISE_NAME)111) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_T_STABILIZATION ((FIT_PLANK_EXERCISE_NAME)112) +#define FIT_PLANK_EXERCISE_NAME_TURKISH_GET_UP_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)113) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_TURKISH_GET_UP_TO_SIDE_PLANK ((FIT_PLANK_EXERCISE_NAME)114) +#define FIT_PLANK_EXERCISE_NAME_TWO_POINT_PLANK ((FIT_PLANK_EXERCISE_NAME)115) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_TWO_POINT_PLANK ((FIT_PLANK_EXERCISE_NAME)116) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_PLANK ((FIT_PLANK_EXERCISE_NAME)117) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_DIAGONAL_ARM_LIFT ((FIT_PLANK_EXERCISE_NAME)118) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_DIAGONAL_ARM_LIFT ((FIT_PLANK_EXERCISE_NAME)119) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_DIAGONAL_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)120) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_DIAGONAL_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)121) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)122) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)123) +#define FIT_PLANK_EXERCISE_NAME_WIDE_STANCE_PLANK_WITH_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)124) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_MOUNTAIN_CLIMBER_WITH_HANDS_ON_BENCH ((FIT_PLANK_EXERCISE_NAME)125) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PLANK_LEG_LIFT_AND_HOLD ((FIT_PLANK_EXERCISE_NAME)126) +#define FIT_PLANK_EXERCISE_NAME_WEIGHTED_WIDE_STANCE_PLANK_WITH_OPPOSITE_ARM_AND_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)127) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_FEET_ON_SWISS_BALL ((FIT_PLANK_EXERCISE_NAME)128) +#define FIT_PLANK_EXERCISE_NAME_SIDE_PLANK_TO_PLANK_WITH_REACH_UNDER ((FIT_PLANK_EXERCISE_NAME)129) +#define FIT_PLANK_EXERCISE_NAME_BRIDGE_WITH_GLUTE_LOWER_LIFT ((FIT_PLANK_EXERCISE_NAME)130) +#define FIT_PLANK_EXERCISE_NAME_BRIDGE_ONE_LEG_BRIDGE ((FIT_PLANK_EXERCISE_NAME)131) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_ARM_VARIATIONS ((FIT_PLANK_EXERCISE_NAME)132) +#define FIT_PLANK_EXERCISE_NAME_PLANK_WITH_LEG_LIFT ((FIT_PLANK_EXERCISE_NAME)133) +#define FIT_PLANK_EXERCISE_NAME_REVERSE_PLANK_WITH_LEG_PULL ((FIT_PLANK_EXERCISE_NAME)134) +#define FIT_PLANK_EXERCISE_NAME_COUNT 135 + +typedef FIT_UINT16 FIT_PLYO_EXERCISE_NAME; +#define FIT_PLYO_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PLYO_EXERCISE_NAME_ALTERNATING_JUMP_LUNGE ((FIT_PLYO_EXERCISE_NAME)0) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_ALTERNATING_JUMP_LUNGE ((FIT_PLYO_EXERCISE_NAME)1) +#define FIT_PLYO_EXERCISE_NAME_BARBELL_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)2) +#define FIT_PLYO_EXERCISE_NAME_BODY_WEIGHT_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)3) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)4) +#define FIT_PLYO_EXERCISE_NAME_CROSS_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)5) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_CROSS_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)6) +#define FIT_PLYO_EXERCISE_NAME_DEPTH_JUMP ((FIT_PLYO_EXERCISE_NAME)7) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_DEPTH_JUMP ((FIT_PLYO_EXERCISE_NAME)8) +#define FIT_PLYO_EXERCISE_NAME_DUMBBELL_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)9) +#define FIT_PLYO_EXERCISE_NAME_DUMBBELL_SPLIT_JUMP ((FIT_PLYO_EXERCISE_NAME)10) +#define FIT_PLYO_EXERCISE_NAME_FRONT_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)11) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_FRONT_KNEE_STRIKE ((FIT_PLYO_EXERCISE_NAME)12) +#define FIT_PLYO_EXERCISE_NAME_HIGH_BOX_JUMP ((FIT_PLYO_EXERCISE_NAME)13) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_HIGH_BOX_JUMP ((FIT_PLYO_EXERCISE_NAME)14) +#define FIT_PLYO_EXERCISE_NAME_ISOMETRIC_EXPLOSIVE_BODY_WEIGHT_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)15) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_ISOMETRIC_EXPLOSIVE_JUMP_SQUAT ((FIT_PLYO_EXERCISE_NAME)16) +#define FIT_PLYO_EXERCISE_NAME_LATERAL_LEAP_AND_HOP ((FIT_PLYO_EXERCISE_NAME)17) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_LATERAL_LEAP_AND_HOP ((FIT_PLYO_EXERCISE_NAME)18) +#define FIT_PLYO_EXERCISE_NAME_LATERAL_PLYO_SQUATS ((FIT_PLYO_EXERCISE_NAME)19) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_LATERAL_PLYO_SQUATS ((FIT_PLYO_EXERCISE_NAME)20) +#define FIT_PLYO_EXERCISE_NAME_LATERAL_SLIDE ((FIT_PLYO_EXERCISE_NAME)21) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_LATERAL_SLIDE ((FIT_PLYO_EXERCISE_NAME)22) +#define FIT_PLYO_EXERCISE_NAME_MEDICINE_BALL_OVERHEAD_THROWS ((FIT_PLYO_EXERCISE_NAME)23) +#define FIT_PLYO_EXERCISE_NAME_MEDICINE_BALL_SIDE_THROW ((FIT_PLYO_EXERCISE_NAME)24) +#define FIT_PLYO_EXERCISE_NAME_MEDICINE_BALL_SLAM ((FIT_PLYO_EXERCISE_NAME)25) +#define FIT_PLYO_EXERCISE_NAME_SIDE_TO_SIDE_MEDICINE_BALL_THROWS ((FIT_PLYO_EXERCISE_NAME)26) +#define FIT_PLYO_EXERCISE_NAME_SIDE_TO_SIDE_SHUFFLE_JUMP ((FIT_PLYO_EXERCISE_NAME)27) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_SIDE_TO_SIDE_SHUFFLE_JUMP ((FIT_PLYO_EXERCISE_NAME)28) +#define FIT_PLYO_EXERCISE_NAME_SQUAT_JUMP_ONTO_BOX ((FIT_PLYO_EXERCISE_NAME)29) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_SQUAT_JUMP_ONTO_BOX ((FIT_PLYO_EXERCISE_NAME)30) +#define FIT_PLYO_EXERCISE_NAME_SQUAT_JUMPS_IN_AND_OUT ((FIT_PLYO_EXERCISE_NAME)31) +#define FIT_PLYO_EXERCISE_NAME_WEIGHTED_SQUAT_JUMPS_IN_AND_OUT ((FIT_PLYO_EXERCISE_NAME)32) +#define FIT_PLYO_EXERCISE_NAME_COUNT 33 + +typedef FIT_UINT16 FIT_PULL_UP_EXERCISE_NAME; +#define FIT_PULL_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PULL_UP_EXERCISE_NAME_BANDED_PULL_UPS ((FIT_PULL_UP_EXERCISE_NAME)0) +#define FIT_PULL_UP_EXERCISE_NAME_30_DEGREE_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)1) +#define FIT_PULL_UP_EXERCISE_NAME_BAND_ASSISTED_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)2) +#define FIT_PULL_UP_EXERCISE_NAME_CLOSE_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)3) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_CLOSE_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)4) +#define FIT_PULL_UP_EXERCISE_NAME_CLOSE_GRIP_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)5) +#define FIT_PULL_UP_EXERCISE_NAME_CROSSOVER_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)6) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_CROSSOVER_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)7) +#define FIT_PULL_UP_EXERCISE_NAME_EZ_BAR_PULLOVER ((FIT_PULL_UP_EXERCISE_NAME)8) +#define FIT_PULL_UP_EXERCISE_NAME_HANGING_HURDLE ((FIT_PULL_UP_EXERCISE_NAME)9) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_HANGING_HURDLE ((FIT_PULL_UP_EXERCISE_NAME)10) +#define FIT_PULL_UP_EXERCISE_NAME_KNEELING_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)11) +#define FIT_PULL_UP_EXERCISE_NAME_KNEELING_UNDERHAND_GRIP_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)12) +#define FIT_PULL_UP_EXERCISE_NAME_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)13) +#define FIT_PULL_UP_EXERCISE_NAME_MIXED_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)14) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_MIXED_GRIP_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)15) +#define FIT_PULL_UP_EXERCISE_NAME_MIXED_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)16) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_MIXED_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)17) +#define FIT_PULL_UP_EXERCISE_NAME_REVERSE_GRIP_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)18) +#define FIT_PULL_UP_EXERCISE_NAME_STANDING_CABLE_PULLOVER ((FIT_PULL_UP_EXERCISE_NAME)19) +#define FIT_PULL_UP_EXERCISE_NAME_STRAIGHT_ARM_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)20) +#define FIT_PULL_UP_EXERCISE_NAME_SWISS_BALL_EZ_BAR_PULLOVER ((FIT_PULL_UP_EXERCISE_NAME)21) +#define FIT_PULL_UP_EXERCISE_NAME_TOWEL_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)22) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_TOWEL_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)23) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)24) +#define FIT_PULL_UP_EXERCISE_NAME_WIDE_GRIP_LAT_PULLDOWN ((FIT_PULL_UP_EXERCISE_NAME)25) +#define FIT_PULL_UP_EXERCISE_NAME_WIDE_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)26) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_WIDE_GRIP_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)27) +#define FIT_PULL_UP_EXERCISE_NAME_BURPEE_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)28) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_BURPEE_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)29) +#define FIT_PULL_UP_EXERCISE_NAME_JUMPING_PULL_UPS ((FIT_PULL_UP_EXERCISE_NAME)30) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_JUMPING_PULL_UPS ((FIT_PULL_UP_EXERCISE_NAME)31) +#define FIT_PULL_UP_EXERCISE_NAME_KIPPING_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)32) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_KIPPING_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)33) +#define FIT_PULL_UP_EXERCISE_NAME_L_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)34) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_L_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)35) +#define FIT_PULL_UP_EXERCISE_NAME_SUSPENDED_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)36) +#define FIT_PULL_UP_EXERCISE_NAME_WEIGHTED_SUSPENDED_CHIN_UP ((FIT_PULL_UP_EXERCISE_NAME)37) +#define FIT_PULL_UP_EXERCISE_NAME_PULL_UP ((FIT_PULL_UP_EXERCISE_NAME)38) +#define FIT_PULL_UP_EXERCISE_NAME_COUNT 39 + +typedef FIT_UINT16 FIT_PUSH_UP_EXERCISE_NAME; +#define FIT_PUSH_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_PUSH_UP_EXERCISE_NAME_CHEST_PRESS_WITH_BAND ((FIT_PUSH_UP_EXERCISE_NAME)0) +#define FIT_PUSH_UP_EXERCISE_NAME_ALTERNATING_STAGGERED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)1) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ALTERNATING_STAGGERED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)2) +#define FIT_PUSH_UP_EXERCISE_NAME_ALTERNATING_HANDS_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)3) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ALTERNATING_HANDS_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)4) +#define FIT_PUSH_UP_EXERCISE_NAME_BOSU_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)5) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_BOSU_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)6) +#define FIT_PUSH_UP_EXERCISE_NAME_CLAPPING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)7) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_CLAPPING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)8) +#define FIT_PUSH_UP_EXERCISE_NAME_CLOSE_GRIP_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)9) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_CLOSE_GRIP_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)10) +#define FIT_PUSH_UP_EXERCISE_NAME_CLOSE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)11) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_CLOSE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)12) +#define FIT_PUSH_UP_EXERCISE_NAME_DECLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)13) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_DECLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)14) +#define FIT_PUSH_UP_EXERCISE_NAME_DIAMOND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)15) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_DIAMOND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)16) +#define FIT_PUSH_UP_EXERCISE_NAME_EXPLOSIVE_CROSSOVER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)17) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_EXPLOSIVE_CROSSOVER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)18) +#define FIT_PUSH_UP_EXERCISE_NAME_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)19) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)20) +#define FIT_PUSH_UP_EXERCISE_NAME_FEET_ELEVATED_SIDE_TO_SIDE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)21) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_FEET_ELEVATED_SIDE_TO_SIDE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)22) +#define FIT_PUSH_UP_EXERCISE_NAME_HAND_RELEASE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)23) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_HAND_RELEASE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)24) +#define FIT_PUSH_UP_EXERCISE_NAME_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)25) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)26) +#define FIT_PUSH_UP_EXERCISE_NAME_INCLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)27) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_INCLINE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)28) +#define FIT_PUSH_UP_EXERCISE_NAME_ISOMETRIC_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)29) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ISOMETRIC_EXPLOSIVE_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)30) +#define FIT_PUSH_UP_EXERCISE_NAME_JUDO_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)31) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_JUDO_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)32) +#define FIT_PUSH_UP_EXERCISE_NAME_KNEELING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)33) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_KNEELING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)34) +#define FIT_PUSH_UP_EXERCISE_NAME_MEDICINE_BALL_CHEST_PASS ((FIT_PUSH_UP_EXERCISE_NAME)35) +#define FIT_PUSH_UP_EXERCISE_NAME_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)36) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)37) +#define FIT_PUSH_UP_EXERCISE_NAME_ONE_ARM_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)38) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_ONE_ARM_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)39) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)40) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_AND_ROW ((FIT_PUSH_UP_EXERCISE_NAME)41) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_AND_ROW ((FIT_PUSH_UP_EXERCISE_NAME)42) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)43) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)44) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_WITH_FEET_ON_SWISS_BALL ((FIT_PUSH_UP_EXERCISE_NAME)45) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_WITH_FEET_ON_SWISS_BALL ((FIT_PUSH_UP_EXERCISE_NAME)46) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP_WITH_ONE_HAND_ON_MEDICINE_BALL ((FIT_PUSH_UP_EXERCISE_NAME)47) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PUSH_UP_WITH_ONE_HAND_ON_MEDICINE_BALL ((FIT_PUSH_UP_EXERCISE_NAME)48) +#define FIT_PUSH_UP_EXERCISE_NAME_SHOULDER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)49) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SHOULDER_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)50) +#define FIT_PUSH_UP_EXERCISE_NAME_SINGLE_ARM_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)51) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SINGLE_ARM_MEDICINE_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)52) +#define FIT_PUSH_UP_EXERCISE_NAME_SPIDERMAN_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)53) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SPIDERMAN_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)54) +#define FIT_PUSH_UP_EXERCISE_NAME_STACKED_FEET_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)55) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_STACKED_FEET_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)56) +#define FIT_PUSH_UP_EXERCISE_NAME_STAGGERED_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)57) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_STAGGERED_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)58) +#define FIT_PUSH_UP_EXERCISE_NAME_SUSPENDED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)59) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SUSPENDED_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)60) +#define FIT_PUSH_UP_EXERCISE_NAME_SWISS_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)61) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)62) +#define FIT_PUSH_UP_EXERCISE_NAME_SWISS_BALL_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)63) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_SWISS_BALL_PUSH_UP_PLUS ((FIT_PUSH_UP_EXERCISE_NAME)64) +#define FIT_PUSH_UP_EXERCISE_NAME_T_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)65) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_T_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)66) +#define FIT_PUSH_UP_EXERCISE_NAME_TRIPLE_STOP_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)67) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_TRIPLE_STOP_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)68) +#define FIT_PUSH_UP_EXERCISE_NAME_WIDE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)69) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_WIDE_HANDS_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)70) +#define FIT_PUSH_UP_EXERCISE_NAME_PARALLETTE_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)71) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_PARALLETTE_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)72) +#define FIT_PUSH_UP_EXERCISE_NAME_RING_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)73) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_RING_HANDSTAND_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)74) +#define FIT_PUSH_UP_EXERCISE_NAME_RING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)75) +#define FIT_PUSH_UP_EXERCISE_NAME_WEIGHTED_RING_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)76) +#define FIT_PUSH_UP_EXERCISE_NAME_PUSH_UP ((FIT_PUSH_UP_EXERCISE_NAME)77) +#define FIT_PUSH_UP_EXERCISE_NAME_PILATES_PUSHUP ((FIT_PUSH_UP_EXERCISE_NAME)78) +#define FIT_PUSH_UP_EXERCISE_NAME_COUNT 79 + +typedef FIT_UINT16 FIT_ROW_EXERCISE_NAME; +#define FIT_ROW_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_ROW_EXERCISE_NAME_BARBELL_STRAIGHT_LEG_DEADLIFT_TO_ROW ((FIT_ROW_EXERCISE_NAME)0) +#define FIT_ROW_EXERCISE_NAME_CABLE_ROW_STANDING ((FIT_ROW_EXERCISE_NAME)1) +#define FIT_ROW_EXERCISE_NAME_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)2) +#define FIT_ROW_EXERCISE_NAME_ELEVATED_FEET_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)3) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_ELEVATED_FEET_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)4) +#define FIT_ROW_EXERCISE_NAME_FACE_PULL ((FIT_ROW_EXERCISE_NAME)5) +#define FIT_ROW_EXERCISE_NAME_FACE_PULL_WITH_EXTERNAL_ROTATION ((FIT_ROW_EXERCISE_NAME)6) +#define FIT_ROW_EXERCISE_NAME_INVERTED_ROW_WITH_FEET_ON_SWISS_BALL ((FIT_ROW_EXERCISE_NAME)7) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_INVERTED_ROW_WITH_FEET_ON_SWISS_BALL ((FIT_ROW_EXERCISE_NAME)8) +#define FIT_ROW_EXERCISE_NAME_KETTLEBELL_ROW ((FIT_ROW_EXERCISE_NAME)9) +#define FIT_ROW_EXERCISE_NAME_MODIFIED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)10) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_MODIFIED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)11) +#define FIT_ROW_EXERCISE_NAME_NEUTRAL_GRIP_ALTERNATING_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)12) +#define FIT_ROW_EXERCISE_NAME_ONE_ARM_BENT_OVER_ROW ((FIT_ROW_EXERCISE_NAME)13) +#define FIT_ROW_EXERCISE_NAME_ONE_LEGGED_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)14) +#define FIT_ROW_EXERCISE_NAME_RENEGADE_ROW ((FIT_ROW_EXERCISE_NAME)15) +#define FIT_ROW_EXERCISE_NAME_REVERSE_GRIP_BARBELL_ROW ((FIT_ROW_EXERCISE_NAME)16) +#define FIT_ROW_EXERCISE_NAME_ROPE_HANDLE_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)17) +#define FIT_ROW_EXERCISE_NAME_SEATED_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)18) +#define FIT_ROW_EXERCISE_NAME_SEATED_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)19) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)20) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_CABLE_ROW_AND_ROTATION ((FIT_ROW_EXERCISE_NAME)21) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)22) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_SINGLE_ARM_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)23) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_NEUTRAL_GRIP_DUMBBELL_ROW ((FIT_ROW_EXERCISE_NAME)24) +#define FIT_ROW_EXERCISE_NAME_SINGLE_ARM_NEUTRAL_GRIP_DUMBBELL_ROW_AND_ROTATION ((FIT_ROW_EXERCISE_NAME)25) +#define FIT_ROW_EXERCISE_NAME_SUSPENDED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)26) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_SUSPENDED_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)27) +#define FIT_ROW_EXERCISE_NAME_T_BAR_ROW ((FIT_ROW_EXERCISE_NAME)28) +#define FIT_ROW_EXERCISE_NAME_TOWEL_GRIP_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)29) +#define FIT_ROW_EXERCISE_NAME_WEIGHTED_TOWEL_GRIP_INVERTED_ROW ((FIT_ROW_EXERCISE_NAME)30) +#define FIT_ROW_EXERCISE_NAME_UNDERHAND_GRIP_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)31) +#define FIT_ROW_EXERCISE_NAME_V_GRIP_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)32) +#define FIT_ROW_EXERCISE_NAME_WIDE_GRIP_SEATED_CABLE_ROW ((FIT_ROW_EXERCISE_NAME)33) +#define FIT_ROW_EXERCISE_NAME_COUNT 34 + +typedef FIT_UINT16 FIT_SHOULDER_PRESS_EXERCISE_NAME; +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_ALTERNATING_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)0) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_ARNOLD_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)1) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_BARBELL_FRONT_SQUAT_TO_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)2) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_BARBELL_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)3) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_BARBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)4) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DEAD_CURL_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)5) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DUMBBELL_ALTERNATING_SHOULDER_PRESS_AND_TWIST ((FIT_SHOULDER_PRESS_EXERCISE_NAME)6) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DUMBBELL_HAMMER_CURL_TO_LUNGE_TO_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)7) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_DUMBBELL_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)8) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_FLOOR_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)9) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_WEIGHTED_FLOOR_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)10) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)11) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_WEIGHTED_INVERTED_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)12) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_ONE_ARM_PUSH_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)13) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_OVERHEAD_BARBELL_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)14) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_OVERHEAD_DUMBBELL_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)15) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SEATED_BARBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)16) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SEATED_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)17) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)18) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SINGLE_ARM_STEP_UP_AND_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)19) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SMITH_MACHINE_OVERHEAD_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)20) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SPLIT_STANCE_HAMMER_CURL_TO_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)21) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_SWISS_BALL_DUMBBELL_SHOULDER_PRESS ((FIT_SHOULDER_PRESS_EXERCISE_NAME)22) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_WEIGHT_PLATE_FRONT_RAISE ((FIT_SHOULDER_PRESS_EXERCISE_NAME)23) +#define FIT_SHOULDER_PRESS_EXERCISE_NAME_COUNT 24 + +typedef FIT_UINT16 FIT_SHOULDER_STABILITY_EXERCISE_NAME; +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_90_DEGREE_CABLE_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)0) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_BAND_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)1) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_BAND_INTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)2) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_BENT_ARM_LATERAL_RAISE_AND_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)3) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_CABLE_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)4) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_DUMBBELL_FACE_PULL_WITH_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)5) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_FLOOR_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)6) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_FLOOR_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)7) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_FLOOR_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)8) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_FLOOR_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)9) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_FLOOR_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)10) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_FLOOR_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)11) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)12) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)13) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_L_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)14) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_L_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)15) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)16) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)17) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)18) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)19) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_INCLINE_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)20) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_INCLINE_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)21) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_LYING_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)22) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SEATED_DUMBBELL_EXTERNAL_ROTATION ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)23) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_STANDING_L_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)24) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)25) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_I_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)26) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)27) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_T_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)28) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)29) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_W_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)30) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_SWISS_BALL_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)31) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_WEIGHTED_SWISS_BALL_Y_RAISE ((FIT_SHOULDER_STABILITY_EXERCISE_NAME)32) +#define FIT_SHOULDER_STABILITY_EXERCISE_NAME_COUNT 33 + +typedef FIT_UINT16 FIT_SHRUG_EXERCISE_NAME; +#define FIT_SHRUG_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SHRUG_EXERCISE_NAME_BARBELL_JUMP_SHRUG ((FIT_SHRUG_EXERCISE_NAME)0) +#define FIT_SHRUG_EXERCISE_NAME_BARBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)1) +#define FIT_SHRUG_EXERCISE_NAME_BARBELL_UPRIGHT_ROW ((FIT_SHRUG_EXERCISE_NAME)2) +#define FIT_SHRUG_EXERCISE_NAME_BEHIND_THE_BACK_SMITH_MACHINE_SHRUG ((FIT_SHRUG_EXERCISE_NAME)3) +#define FIT_SHRUG_EXERCISE_NAME_DUMBBELL_JUMP_SHRUG ((FIT_SHRUG_EXERCISE_NAME)4) +#define FIT_SHRUG_EXERCISE_NAME_DUMBBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)5) +#define FIT_SHRUG_EXERCISE_NAME_DUMBBELL_UPRIGHT_ROW ((FIT_SHRUG_EXERCISE_NAME)6) +#define FIT_SHRUG_EXERCISE_NAME_INCLINE_DUMBBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)7) +#define FIT_SHRUG_EXERCISE_NAME_OVERHEAD_BARBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)8) +#define FIT_SHRUG_EXERCISE_NAME_OVERHEAD_DUMBBELL_SHRUG ((FIT_SHRUG_EXERCISE_NAME)9) +#define FIT_SHRUG_EXERCISE_NAME_SCAPTION_AND_SHRUG ((FIT_SHRUG_EXERCISE_NAME)10) +#define FIT_SHRUG_EXERCISE_NAME_SCAPULAR_RETRACTION ((FIT_SHRUG_EXERCISE_NAME)11) +#define FIT_SHRUG_EXERCISE_NAME_SERRATUS_CHAIR_SHRUG ((FIT_SHRUG_EXERCISE_NAME)12) +#define FIT_SHRUG_EXERCISE_NAME_WEIGHTED_SERRATUS_CHAIR_SHRUG ((FIT_SHRUG_EXERCISE_NAME)13) +#define FIT_SHRUG_EXERCISE_NAME_SERRATUS_SHRUG ((FIT_SHRUG_EXERCISE_NAME)14) +#define FIT_SHRUG_EXERCISE_NAME_WEIGHTED_SERRATUS_SHRUG ((FIT_SHRUG_EXERCISE_NAME)15) +#define FIT_SHRUG_EXERCISE_NAME_WIDE_GRIP_JUMP_SHRUG ((FIT_SHRUG_EXERCISE_NAME)16) +#define FIT_SHRUG_EXERCISE_NAME_COUNT 17 + +typedef FIT_UINT16 FIT_SIT_UP_EXERCISE_NAME; +#define FIT_SIT_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SIT_UP_EXERCISE_NAME_ALTERNATING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)0) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_ALTERNATING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)1) +#define FIT_SIT_UP_EXERCISE_NAME_BENT_KNEE_V_UP ((FIT_SIT_UP_EXERCISE_NAME)2) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_BENT_KNEE_V_UP ((FIT_SIT_UP_EXERCISE_NAME)3) +#define FIT_SIT_UP_EXERCISE_NAME_BUTTERFLY_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)4) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_BUTTERFLY_SITUP ((FIT_SIT_UP_EXERCISE_NAME)5) +#define FIT_SIT_UP_EXERCISE_NAME_CROSS_PUNCH_ROLL_UP ((FIT_SIT_UP_EXERCISE_NAME)6) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_CROSS_PUNCH_ROLL_UP ((FIT_SIT_UP_EXERCISE_NAME)7) +#define FIT_SIT_UP_EXERCISE_NAME_CROSSED_ARMS_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)8) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_CROSSED_ARMS_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)9) +#define FIT_SIT_UP_EXERCISE_NAME_GET_UP_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)10) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_GET_UP_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)11) +#define FIT_SIT_UP_EXERCISE_NAME_HOVERING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)12) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_HOVERING_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)13) +#define FIT_SIT_UP_EXERCISE_NAME_KETTLEBELL_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)14) +#define FIT_SIT_UP_EXERCISE_NAME_MEDICINE_BALL_ALTERNATING_V_UP ((FIT_SIT_UP_EXERCISE_NAME)15) +#define FIT_SIT_UP_EXERCISE_NAME_MEDICINE_BALL_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)16) +#define FIT_SIT_UP_EXERCISE_NAME_MEDICINE_BALL_V_UP ((FIT_SIT_UP_EXERCISE_NAME)17) +#define FIT_SIT_UP_EXERCISE_NAME_MODIFIED_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)18) +#define FIT_SIT_UP_EXERCISE_NAME_NEGATIVE_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)19) +#define FIT_SIT_UP_EXERCISE_NAME_ONE_ARM_FULL_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)20) +#define FIT_SIT_UP_EXERCISE_NAME_RECLINING_CIRCLE ((FIT_SIT_UP_EXERCISE_NAME)21) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_RECLINING_CIRCLE ((FIT_SIT_UP_EXERCISE_NAME)22) +#define FIT_SIT_UP_EXERCISE_NAME_REVERSE_CURL_UP ((FIT_SIT_UP_EXERCISE_NAME)23) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_REVERSE_CURL_UP ((FIT_SIT_UP_EXERCISE_NAME)24) +#define FIT_SIT_UP_EXERCISE_NAME_SINGLE_LEG_SWISS_BALL_JACKKNIFE ((FIT_SIT_UP_EXERCISE_NAME)25) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_SWISS_BALL_JACKKNIFE ((FIT_SIT_UP_EXERCISE_NAME)26) +#define FIT_SIT_UP_EXERCISE_NAME_THE_TEASER ((FIT_SIT_UP_EXERCISE_NAME)27) +#define FIT_SIT_UP_EXERCISE_NAME_THE_TEASER_WEIGHTED ((FIT_SIT_UP_EXERCISE_NAME)28) +#define FIT_SIT_UP_EXERCISE_NAME_THREE_PART_ROLL_DOWN ((FIT_SIT_UP_EXERCISE_NAME)29) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_THREE_PART_ROLL_DOWN ((FIT_SIT_UP_EXERCISE_NAME)30) +#define FIT_SIT_UP_EXERCISE_NAME_V_UP ((FIT_SIT_UP_EXERCISE_NAME)31) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_V_UP ((FIT_SIT_UP_EXERCISE_NAME)32) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_RUSSIAN_TWIST_ON_SWISS_BALL ((FIT_SIT_UP_EXERCISE_NAME)33) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)34) +#define FIT_SIT_UP_EXERCISE_NAME_X_ABS ((FIT_SIT_UP_EXERCISE_NAME)35) +#define FIT_SIT_UP_EXERCISE_NAME_WEIGHTED_X_ABS ((FIT_SIT_UP_EXERCISE_NAME)36) +#define FIT_SIT_UP_EXERCISE_NAME_SIT_UP ((FIT_SIT_UP_EXERCISE_NAME)37) +#define FIT_SIT_UP_EXERCISE_NAME_COUNT 38 + +typedef FIT_UINT16 FIT_SQUAT_EXERCISE_NAME; +#define FIT_SQUAT_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_SQUAT_EXERCISE_NAME_LEG_PRESS ((FIT_SQUAT_EXERCISE_NAME)0) +#define FIT_SQUAT_EXERCISE_NAME_BACK_SQUAT_WITH_BODY_BAR ((FIT_SQUAT_EXERCISE_NAME)1) +#define FIT_SQUAT_EXERCISE_NAME_BACK_SQUATS ((FIT_SQUAT_EXERCISE_NAME)2) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BACK_SQUATS ((FIT_SQUAT_EXERCISE_NAME)3) +#define FIT_SQUAT_EXERCISE_NAME_BALANCING_SQUAT ((FIT_SQUAT_EXERCISE_NAME)4) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BALANCING_SQUAT ((FIT_SQUAT_EXERCISE_NAME)5) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_BACK_SQUAT ((FIT_SQUAT_EXERCISE_NAME)6) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_BOX_SQUAT ((FIT_SQUAT_EXERCISE_NAME)7) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_FRONT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)8) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_HACK_SQUAT ((FIT_SQUAT_EXERCISE_NAME)9) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_HANG_SQUAT_SNATCH ((FIT_SQUAT_EXERCISE_NAME)10) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_LATERAL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)11) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_QUARTER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)12) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_SIFF_SQUAT ((FIT_SQUAT_EXERCISE_NAME)13) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_SQUAT_SNATCH ((FIT_SQUAT_EXERCISE_NAME)14) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_SQUAT_WITH_HEELS_RAISED ((FIT_SQUAT_EXERCISE_NAME)15) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_STEPOVER ((FIT_SQUAT_EXERCISE_NAME)16) +#define FIT_SQUAT_EXERCISE_NAME_BARBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)17) +#define FIT_SQUAT_EXERCISE_NAME_BENCH_SQUAT_WITH_ROTATIONAL_CHOP ((FIT_SQUAT_EXERCISE_NAME)18) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BENCH_SQUAT_WITH_ROTATIONAL_CHOP ((FIT_SQUAT_EXERCISE_NAME)19) +#define FIT_SQUAT_EXERCISE_NAME_BODY_WEIGHT_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)20) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)21) +#define FIT_SQUAT_EXERCISE_NAME_BOX_STEP_SQUAT ((FIT_SQUAT_EXERCISE_NAME)22) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_BOX_STEP_SQUAT ((FIT_SQUAT_EXERCISE_NAME)23) +#define FIT_SQUAT_EXERCISE_NAME_BRACED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)24) +#define FIT_SQUAT_EXERCISE_NAME_CROSSED_ARM_BARBELL_FRONT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)25) +#define FIT_SQUAT_EXERCISE_NAME_CROSSOVER_DUMBBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)26) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_FRONT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)27) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_SPLIT_SQUAT ((FIT_SQUAT_EXERCISE_NAME)28) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)29) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_SQUAT_CLEAN ((FIT_SQUAT_EXERCISE_NAME)30) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_STEPOVER ((FIT_SQUAT_EXERCISE_NAME)31) +#define FIT_SQUAT_EXERCISE_NAME_DUMBBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)32) +#define FIT_SQUAT_EXERCISE_NAME_ELEVATED_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)33) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_ELEVATED_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)34) +#define FIT_SQUAT_EXERCISE_NAME_FIGURE_FOUR_SQUATS ((FIT_SQUAT_EXERCISE_NAME)35) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_FIGURE_FOUR_SQUATS ((FIT_SQUAT_EXERCISE_NAME)36) +#define FIT_SQUAT_EXERCISE_NAME_GOBLET_SQUAT ((FIT_SQUAT_EXERCISE_NAME)37) +#define FIT_SQUAT_EXERCISE_NAME_KETTLEBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)38) +#define FIT_SQUAT_EXERCISE_NAME_KETTLEBELL_SWING_OVERHEAD ((FIT_SQUAT_EXERCISE_NAME)39) +#define FIT_SQUAT_EXERCISE_NAME_KETTLEBELL_SWING_WITH_FLIP_TO_SQUAT ((FIT_SQUAT_EXERCISE_NAME)40) +#define FIT_SQUAT_EXERCISE_NAME_LATERAL_DUMBBELL_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)41) +#define FIT_SQUAT_EXERCISE_NAME_ONE_LEGGED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)42) +#define FIT_SQUAT_EXERCISE_NAME_OVERHEAD_DUMBBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)43) +#define FIT_SQUAT_EXERCISE_NAME_OVERHEAD_SQUAT ((FIT_SQUAT_EXERCISE_NAME)44) +#define FIT_SQUAT_EXERCISE_NAME_PARTIAL_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)45) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PARTIAL_SINGLE_LEG_SQUAT ((FIT_SQUAT_EXERCISE_NAME)46) +#define FIT_SQUAT_EXERCISE_NAME_PISTOL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)47) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PISTOL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)48) +#define FIT_SQUAT_EXERCISE_NAME_PLIE_SLIDES ((FIT_SQUAT_EXERCISE_NAME)49) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PLIE_SLIDES ((FIT_SQUAT_EXERCISE_NAME)50) +#define FIT_SQUAT_EXERCISE_NAME_PLIE_SQUAT ((FIT_SQUAT_EXERCISE_NAME)51) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PLIE_SQUAT ((FIT_SQUAT_EXERCISE_NAME)52) +#define FIT_SQUAT_EXERCISE_NAME_PRISONER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)53) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_PRISONER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)54) +#define FIT_SQUAT_EXERCISE_NAME_SINGLE_LEG_BENCH_GET_UP ((FIT_SQUAT_EXERCISE_NAME)55) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENCH_GET_UP ((FIT_SQUAT_EXERCISE_NAME)56) +#define FIT_SQUAT_EXERCISE_NAME_SINGLE_LEG_BENCH_SQUAT ((FIT_SQUAT_EXERCISE_NAME)57) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENCH_SQUAT ((FIT_SQUAT_EXERCISE_NAME)58) +#define FIT_SQUAT_EXERCISE_NAME_SINGLE_LEG_SQUAT_ON_SWISS_BALL ((FIT_SQUAT_EXERCISE_NAME)59) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_SQUAT_ON_SWISS_BALL ((FIT_SQUAT_EXERCISE_NAME)60) +#define FIT_SQUAT_EXERCISE_NAME_SQUAT ((FIT_SQUAT_EXERCISE_NAME)61) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)62) +#define FIT_SQUAT_EXERCISE_NAME_SQUATS_WITH_BAND ((FIT_SQUAT_EXERCISE_NAME)63) +#define FIT_SQUAT_EXERCISE_NAME_STAGGERED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)64) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_STAGGERED_SQUAT ((FIT_SQUAT_EXERCISE_NAME)65) +#define FIT_SQUAT_EXERCISE_NAME_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)66) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_STEP_UP ((FIT_SQUAT_EXERCISE_NAME)67) +#define FIT_SQUAT_EXERCISE_NAME_SUITCASE_SQUATS ((FIT_SQUAT_EXERCISE_NAME)68) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT ((FIT_SQUAT_EXERCISE_NAME)69) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_SLIDE_IN ((FIT_SQUAT_EXERCISE_NAME)70) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SUMO_SQUAT_SLIDE_IN ((FIT_SQUAT_EXERCISE_NAME)71) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_TO_HIGH_PULL ((FIT_SQUAT_EXERCISE_NAME)72) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_TO_STAND ((FIT_SQUAT_EXERCISE_NAME)73) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SUMO_SQUAT_TO_STAND ((FIT_SQUAT_EXERCISE_NAME)74) +#define FIT_SQUAT_EXERCISE_NAME_SUMO_SQUAT_WITH_ROTATION ((FIT_SQUAT_EXERCISE_NAME)75) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SUMO_SQUAT_WITH_ROTATION ((FIT_SQUAT_EXERCISE_NAME)76) +#define FIT_SQUAT_EXERCISE_NAME_SWISS_BALL_BODY_WEIGHT_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)77) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_SWISS_BALL_WALL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)78) +#define FIT_SQUAT_EXERCISE_NAME_THRUSTERS ((FIT_SQUAT_EXERCISE_NAME)79) +#define FIT_SQUAT_EXERCISE_NAME_UNEVEN_SQUAT ((FIT_SQUAT_EXERCISE_NAME)80) +#define FIT_SQUAT_EXERCISE_NAME_WEIGHTED_UNEVEN_SQUAT ((FIT_SQUAT_EXERCISE_NAME)81) +#define FIT_SQUAT_EXERCISE_NAME_WAIST_SLIMMING_SQUAT ((FIT_SQUAT_EXERCISE_NAME)82) +#define FIT_SQUAT_EXERCISE_NAME_WALL_BALL ((FIT_SQUAT_EXERCISE_NAME)83) +#define FIT_SQUAT_EXERCISE_NAME_WIDE_STANCE_BARBELL_SQUAT ((FIT_SQUAT_EXERCISE_NAME)84) +#define FIT_SQUAT_EXERCISE_NAME_WIDE_STANCE_GOBLET_SQUAT ((FIT_SQUAT_EXERCISE_NAME)85) +#define FIT_SQUAT_EXERCISE_NAME_ZERCHER_SQUAT ((FIT_SQUAT_EXERCISE_NAME)86) +#define FIT_SQUAT_EXERCISE_NAME_KBS_OVERHEAD ((FIT_SQUAT_EXERCISE_NAME)87) // Deprecated do not use +#define FIT_SQUAT_EXERCISE_NAME_SQUAT_AND_SIDE_KICK ((FIT_SQUAT_EXERCISE_NAME)88) +#define FIT_SQUAT_EXERCISE_NAME_SQUAT_JUMPS_IN_N_OUT ((FIT_SQUAT_EXERCISE_NAME)89) +#define FIT_SQUAT_EXERCISE_NAME_PILATES_PLIE_SQUATS_PARALLEL_TURNED_OUT_FLAT_AND_HEELS ((FIT_SQUAT_EXERCISE_NAME)90) +#define FIT_SQUAT_EXERCISE_NAME_RELEVE_STRAIGHT_LEG_AND_KNEE_BENT_WITH_ONE_LEG_VARIATION ((FIT_SQUAT_EXERCISE_NAME)91) +#define FIT_SQUAT_EXERCISE_NAME_COUNT 92 + +typedef FIT_UINT16 FIT_TOTAL_BODY_EXERCISE_NAME; +#define FIT_TOTAL_BODY_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_TOTAL_BODY_EXERCISE_NAME_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)0) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)1) +#define FIT_TOTAL_BODY_EXERCISE_NAME_BURPEE_BOX_JUMP ((FIT_TOTAL_BODY_EXERCISE_NAME)2) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_BURPEE_BOX_JUMP ((FIT_TOTAL_BODY_EXERCISE_NAME)3) +#define FIT_TOTAL_BODY_EXERCISE_NAME_HIGH_PULL_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)4) +#define FIT_TOTAL_BODY_EXERCISE_NAME_MAN_MAKERS ((FIT_TOTAL_BODY_EXERCISE_NAME)5) +#define FIT_TOTAL_BODY_EXERCISE_NAME_ONE_ARM_BURPEE ((FIT_TOTAL_BODY_EXERCISE_NAME)6) +#define FIT_TOTAL_BODY_EXERCISE_NAME_SQUAT_THRUSTS ((FIT_TOTAL_BODY_EXERCISE_NAME)7) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_SQUAT_THRUSTS ((FIT_TOTAL_BODY_EXERCISE_NAME)8) +#define FIT_TOTAL_BODY_EXERCISE_NAME_SQUAT_PLANK_PUSH_UP ((FIT_TOTAL_BODY_EXERCISE_NAME)9) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_SQUAT_PLANK_PUSH_UP ((FIT_TOTAL_BODY_EXERCISE_NAME)10) +#define FIT_TOTAL_BODY_EXERCISE_NAME_STANDING_T_ROTATION_BALANCE ((FIT_TOTAL_BODY_EXERCISE_NAME)11) +#define FIT_TOTAL_BODY_EXERCISE_NAME_WEIGHTED_STANDING_T_ROTATION_BALANCE ((FIT_TOTAL_BODY_EXERCISE_NAME)12) +#define FIT_TOTAL_BODY_EXERCISE_NAME_COUNT 13 + +typedef FIT_UINT16 FIT_TRICEPS_EXTENSION_EXERCISE_NAME; +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_BENCH_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)0) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_BENCH_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)1) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_BODY_WEIGHT_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)2) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_CABLE_KICKBACK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)3) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_CABLE_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)4) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_CABLE_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)5) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_DUMBBELL_KICKBACK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)6) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_DUMBBELL_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)7) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_EZ_BAR_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)8) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_INCLINE_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)9) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_INCLINE_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)10) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_INCLINE_EZ_BAR_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)11) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_LYING_DUMBBELL_PULLOVER_TO_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)12) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_LYING_EZ_BAR_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)13) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_LYING_TRICEPS_EXTENSION_TO_CLOSE_GRIP_BENCH_PRESS ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)14) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_OVERHEAD_DUMBBELL_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)15) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_RECLINING_TRICEPS_PRESS ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)16) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_REVERSE_GRIP_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)17) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_REVERSE_GRIP_TRICEPS_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)18) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_ROPE_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)19) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_BARBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)20) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_DUMBBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)21) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_EZ_BAR_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)22) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SEATED_SINGLE_ARM_OVERHEAD_DUMBBELL_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)23) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_ARM_DUMBBELL_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)24) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_DUMBBELL_SEATED_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)25) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_LEG_BENCH_DIP_AND_KICK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)26) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_BENCH_DIP_AND_KICK ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)27) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SINGLE_LEG_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)28) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_SINGLE_LEG_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)29) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_STATIC_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)30) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SUSPENDED_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)31) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_SUSPENDED_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)32) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SWISS_BALL_DUMBBELL_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)33) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SWISS_BALL_EZ_BAR_LYING_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)34) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_SWISS_BALL_EZ_BAR_OVERHEAD_TRICEPS_EXTENSION ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)35) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_TABLETOP_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)36) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_TABLETOP_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)37) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_TRICEPS_EXTENSION_ON_FLOOR ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)38) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_TRICEPS_PRESSDOWN ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)39) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_WEIGHTED_DIP ((FIT_TRICEPS_EXTENSION_EXERCISE_NAME)40) +#define FIT_TRICEPS_EXTENSION_EXERCISE_NAME_COUNT 41 + +typedef FIT_UINT16 FIT_WARM_UP_EXERCISE_NAME; +#define FIT_WARM_UP_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_WARM_UP_EXERCISE_NAME_QUADRUPED_ROCKING ((FIT_WARM_UP_EXERCISE_NAME)0) +#define FIT_WARM_UP_EXERCISE_NAME_NECK_TILTS ((FIT_WARM_UP_EXERCISE_NAME)1) +#define FIT_WARM_UP_EXERCISE_NAME_ANKLE_CIRCLES ((FIT_WARM_UP_EXERCISE_NAME)2) +#define FIT_WARM_UP_EXERCISE_NAME_ANKLE_DORSIFLEXION_WITH_BAND ((FIT_WARM_UP_EXERCISE_NAME)3) +#define FIT_WARM_UP_EXERCISE_NAME_ANKLE_INTERNAL_ROTATION ((FIT_WARM_UP_EXERCISE_NAME)4) +#define FIT_WARM_UP_EXERCISE_NAME_ARM_CIRCLES ((FIT_WARM_UP_EXERCISE_NAME)5) +#define FIT_WARM_UP_EXERCISE_NAME_BENT_OVER_REACH_TO_SKY ((FIT_WARM_UP_EXERCISE_NAME)6) +#define FIT_WARM_UP_EXERCISE_NAME_CAT_CAMEL ((FIT_WARM_UP_EXERCISE_NAME)7) +#define FIT_WARM_UP_EXERCISE_NAME_ELBOW_TO_FOOT_LUNGE ((FIT_WARM_UP_EXERCISE_NAME)8) +#define FIT_WARM_UP_EXERCISE_NAME_FORWARD_AND_BACKWARD_LEG_SWINGS ((FIT_WARM_UP_EXERCISE_NAME)9) +#define FIT_WARM_UP_EXERCISE_NAME_GROINERS ((FIT_WARM_UP_EXERCISE_NAME)10) +#define FIT_WARM_UP_EXERCISE_NAME_INVERTED_HAMSTRING_STRETCH ((FIT_WARM_UP_EXERCISE_NAME)11) +#define FIT_WARM_UP_EXERCISE_NAME_LATERAL_DUCK_UNDER ((FIT_WARM_UP_EXERCISE_NAME)12) +#define FIT_WARM_UP_EXERCISE_NAME_NECK_ROTATIONS ((FIT_WARM_UP_EXERCISE_NAME)13) +#define FIT_WARM_UP_EXERCISE_NAME_OPPOSITE_ARM_AND_LEG_BALANCE ((FIT_WARM_UP_EXERCISE_NAME)14) +#define FIT_WARM_UP_EXERCISE_NAME_REACH_ROLL_AND_LIFT ((FIT_WARM_UP_EXERCISE_NAME)15) +#define FIT_WARM_UP_EXERCISE_NAME_SCORPION ((FIT_WARM_UP_EXERCISE_NAME)16) // Deprecated do not use +#define FIT_WARM_UP_EXERCISE_NAME_SHOULDER_CIRCLES ((FIT_WARM_UP_EXERCISE_NAME)17) +#define FIT_WARM_UP_EXERCISE_NAME_SIDE_TO_SIDE_LEG_SWINGS ((FIT_WARM_UP_EXERCISE_NAME)18) +#define FIT_WARM_UP_EXERCISE_NAME_SLEEPER_STRETCH ((FIT_WARM_UP_EXERCISE_NAME)19) +#define FIT_WARM_UP_EXERCISE_NAME_SLIDE_OUT ((FIT_WARM_UP_EXERCISE_NAME)20) +#define FIT_WARM_UP_EXERCISE_NAME_SWISS_BALL_HIP_CROSSOVER ((FIT_WARM_UP_EXERCISE_NAME)21) +#define FIT_WARM_UP_EXERCISE_NAME_SWISS_BALL_REACH_ROLL_AND_LIFT ((FIT_WARM_UP_EXERCISE_NAME)22) +#define FIT_WARM_UP_EXERCISE_NAME_SWISS_BALL_WINDSHIELD_WIPERS ((FIT_WARM_UP_EXERCISE_NAME)23) +#define FIT_WARM_UP_EXERCISE_NAME_THORACIC_ROTATION ((FIT_WARM_UP_EXERCISE_NAME)24) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_HIGH_KICKS ((FIT_WARM_UP_EXERCISE_NAME)25) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_HIGH_KNEES ((FIT_WARM_UP_EXERCISE_NAME)26) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_KNEE_HUGS ((FIT_WARM_UP_EXERCISE_NAME)27) +#define FIT_WARM_UP_EXERCISE_NAME_WALKING_LEG_CRADLES ((FIT_WARM_UP_EXERCISE_NAME)28) +#define FIT_WARM_UP_EXERCISE_NAME_WALKOUT ((FIT_WARM_UP_EXERCISE_NAME)29) +#define FIT_WARM_UP_EXERCISE_NAME_WALKOUT_FROM_PUSH_UP_POSITION ((FIT_WARM_UP_EXERCISE_NAME)30) +#define FIT_WARM_UP_EXERCISE_NAME_COUNT 31 + +typedef FIT_UINT16 FIT_RUN_EXERCISE_NAME; +#define FIT_RUN_EXERCISE_NAME_INVALID FIT_UINT16_INVALID +#define FIT_RUN_EXERCISE_NAME_RUN ((FIT_RUN_EXERCISE_NAME)0) +#define FIT_RUN_EXERCISE_NAME_WALK ((FIT_RUN_EXERCISE_NAME)1) +#define FIT_RUN_EXERCISE_NAME_JOG ((FIT_RUN_EXERCISE_NAME)2) +#define FIT_RUN_EXERCISE_NAME_SPRINT ((FIT_RUN_EXERCISE_NAME)3) +#define FIT_RUN_EXERCISE_NAME_COUNT 4 + +typedef FIT_ENUM FIT_WATER_TYPE; +#define FIT_WATER_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_WATER_TYPE_FRESH ((FIT_WATER_TYPE)0) +#define FIT_WATER_TYPE_SALT ((FIT_WATER_TYPE)1) +#define FIT_WATER_TYPE_EN13319 ((FIT_WATER_TYPE)2) +#define FIT_WATER_TYPE_CUSTOM ((FIT_WATER_TYPE)3) +#define FIT_WATER_TYPE_COUNT 4 + +typedef FIT_ENUM FIT_TISSUE_MODEL_TYPE; +#define FIT_TISSUE_MODEL_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_TISSUE_MODEL_TYPE_ZHL_16C ((FIT_TISSUE_MODEL_TYPE)0) // Buhlmann's decompression algorithm, version C +#define FIT_TISSUE_MODEL_TYPE_COUNT 1 + +typedef FIT_ENUM FIT_DIVE_GAS_STATUS; +#define FIT_DIVE_GAS_STATUS_INVALID FIT_ENUM_INVALID +#define FIT_DIVE_GAS_STATUS_DISABLED ((FIT_DIVE_GAS_STATUS)0) +#define FIT_DIVE_GAS_STATUS_ENABLED ((FIT_DIVE_GAS_STATUS)1) +#define FIT_DIVE_GAS_STATUS_BACKUP_ONLY ((FIT_DIVE_GAS_STATUS)2) +#define FIT_DIVE_GAS_STATUS_COUNT 3 + +typedef FIT_ENUM FIT_DIVE_ALARM_TYPE; +#define FIT_DIVE_ALARM_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_DIVE_ALARM_TYPE_DEPTH ((FIT_DIVE_ALARM_TYPE)0) // Alarm when a certain depth is crossed +#define FIT_DIVE_ALARM_TYPE_TIME ((FIT_DIVE_ALARM_TYPE)1) // Alarm when a certain time has transpired +#define FIT_DIVE_ALARM_TYPE_COUNT 2 + +typedef FIT_ENUM FIT_DIVE_BACKLIGHT_MODE; +#define FIT_DIVE_BACKLIGHT_MODE_INVALID FIT_ENUM_INVALID +#define FIT_DIVE_BACKLIGHT_MODE_AT_DEPTH ((FIT_DIVE_BACKLIGHT_MODE)0) +#define FIT_DIVE_BACKLIGHT_MODE_ALWAYS_ON ((FIT_DIVE_BACKLIGHT_MODE)1) +#define FIT_DIVE_BACKLIGHT_MODE_COUNT 2 + +typedef FIT_UINT16 FIT_FAVERO_PRODUCT; +#define FIT_FAVERO_PRODUCT_INVALID FIT_UINT16_INVALID +#define FIT_FAVERO_PRODUCT_ASSIOMA_UNO ((FIT_FAVERO_PRODUCT)10) +#define FIT_FAVERO_PRODUCT_ASSIOMA_DUO ((FIT_FAVERO_PRODUCT)12) +#define FIT_FAVERO_PRODUCT_COUNT 2 + +typedef FIT_ENUM FIT_CLIMB_PRO_EVENT; +#define FIT_CLIMB_PRO_EVENT_INVALID FIT_ENUM_INVALID +#define FIT_CLIMB_PRO_EVENT_APPROACH ((FIT_CLIMB_PRO_EVENT)0) +#define FIT_CLIMB_PRO_EVENT_START ((FIT_CLIMB_PRO_EVENT)1) +#define FIT_CLIMB_PRO_EVENT_COMPLETE ((FIT_CLIMB_PRO_EVENT)2) +#define FIT_CLIMB_PRO_EVENT_COUNT 3 + +typedef FIT_ENUM FIT_TAP_SENSITIVITY; +#define FIT_TAP_SENSITIVITY_INVALID FIT_ENUM_INVALID +#define FIT_TAP_SENSITIVITY_HIGH ((FIT_TAP_SENSITIVITY)0) +#define FIT_TAP_SENSITIVITY_MEDIUM ((FIT_TAP_SENSITIVITY)1) +#define FIT_TAP_SENSITIVITY_LOW ((FIT_TAP_SENSITIVITY)2) +#define FIT_TAP_SENSITIVITY_COUNT 3 + +typedef FIT_ENUM FIT_RADAR_THREAT_LEVEL_TYPE; +#define FIT_RADAR_THREAT_LEVEL_TYPE_INVALID FIT_ENUM_INVALID +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_UNKNOWN ((FIT_RADAR_THREAT_LEVEL_TYPE)0) +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_NONE ((FIT_RADAR_THREAT_LEVEL_TYPE)1) +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_APPROACHING ((FIT_RADAR_THREAT_LEVEL_TYPE)2) +#define FIT_RADAR_THREAT_LEVEL_TYPE_THREAT_APPROACHING_FAST ((FIT_RADAR_THREAT_LEVEL_TYPE)3) +#define FIT_RADAR_THREAT_LEVEL_TYPE_COUNT 4 + + +#endif // !defined(FIT_CPP_INCLUDE_C) + +/////////////////////////////////////////////////////////////////////// +// Miscellaneous +/////////////////////////////////////////////////////////////////////// + +#define FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD (FIT_UINT16_INVALID - 1) +#define FIT_SUBFIELD_INDEX_MAIN_FIELD (FIT_UINT16_INVALID) + + +namespace fit +{ + +class Profile +{ +public: + enum class Type + { + Enum, + Sint8, + Uint8, + Sint16, + Uint16, + Sint32, + Uint32, + String, + Float32, + Float64, + Uint8z, + Uint16z, + Uint32z, + Byte, + Sint64, + Uint64, + Uint64z, + Bool, + File, + MesgNum, + Checksum, + FileFlags, + MesgCount, + DateTime, + LocalDateTime, + MessageIndex, + DeviceIndex, + Gender, + Language, + LanguageBits0, + LanguageBits1, + LanguageBits2, + LanguageBits3, + LanguageBits4, + TimeZone, + DisplayMeasure, + DisplayHeart, + DisplayPower, + DisplayPosition, + Switch, + Sport, + SportBits0, + SportBits1, + SportBits2, + SportBits3, + SportBits4, + SportBits5, + SportBits6, + SubSport, + SportEvent, + Activity, + Intensity, + SessionTrigger, + AutolapTrigger, + LapTrigger, + TimeMode, + BacklightMode, + DateMode, + BacklightTimeout, + Event, + EventType, + TimerTrigger, + FitnessEquipmentState, + Tone, + Autoscroll, + ActivityClass, + HrZoneCalc, + PwrZoneCalc, + WktStepDuration, + WktStepTarget, + Goal, + GoalRecurrence, + GoalSource, + Schedule, + CoursePoint, + Manufacturer, + GarminProduct, + AntplusDeviceType, + AntNetwork, + WorkoutCapabilities, + BatteryStatus, + HrType, + CourseCapabilities, + Weight, + WorkoutHr, + WorkoutPower, + BpStatus, + UserLocalId, + SwimStroke, + ActivityType, + ActivitySubtype, + ActivityLevel, + Side, + LeftRightBalance, + LeftRightBalance100, + LengthType, + DayOfWeek, + ConnectivityCapabilities, + WeatherReport, + WeatherStatus, + WeatherSeverity, + WeatherSevereType, + TimeIntoDay, + LocaltimeIntoDay, + StrokeType, + BodyLocation, + SegmentLapStatus, + SegmentLeaderboardType, + SegmentDeleteStatus, + SegmentSelectionType, + SourceType, + LocalDeviceType, + DisplayOrientation, + WorkoutEquipment, + WatchfaceMode, + DigitalWatchfaceLayout, + AnalogWatchfaceLayout, + RiderPositionType, + PowerPhaseType, + CameraEventType, + SensorType, + BikeLightNetworkConfigType, + CommTimeoutType, + CameraOrientationType, + AttitudeStage, + AttitudeValidity, + AutoSyncFrequency, + ExdLayout, + ExdDisplayType, + ExdDataUnits, + ExdQualifiers, + ExdDescriptors, + AutoActivityDetect, + SupportedExdScreenLayouts, + FitBaseType, + TurnType, + BikeLightBeamAngleMode, + FitBaseUnit, + SetType, + ExerciseCategory, + BenchPressExerciseName, + CalfRaiseExerciseName, + CardioExerciseName, + CarryExerciseName, + ChopExerciseName, + CoreExerciseName, + CrunchExerciseName, + CurlExerciseName, + DeadliftExerciseName, + FlyeExerciseName, + HipRaiseExerciseName, + HipStabilityExerciseName, + HipSwingExerciseName, + HyperextensionExerciseName, + LateralRaiseExerciseName, + LegCurlExerciseName, + LegRaiseExerciseName, + LungeExerciseName, + OlympicLiftExerciseName, + PlankExerciseName, + PlyoExerciseName, + PullUpExerciseName, + PushUpExerciseName, + RowExerciseName, + ShoulderPressExerciseName, + ShoulderStabilityExerciseName, + ShrugExerciseName, + SitUpExerciseName, + SquatExerciseName, + TotalBodyExerciseName, + TricepsExtensionExerciseName, + WarmUpExerciseName, + RunExerciseName, + WaterType, + TissueModelType, + DiveGasStatus, + DiveAlarmType, + DiveBacklightMode, + FaveroProduct, + ClimbProEvent, + TapSensitivity, + RadarThreatLevelType, + Invalid + }; + + typedef enum + { + MESG_FILE_ID, + MESG_FILE_CREATOR, + MESG_TIMESTAMP_CORRELATION, + MESG_SOFTWARE, + MESG_SLAVE_DEVICE, + MESG_CAPABILITIES, + MESG_FILE_CAPABILITIES, + MESG_MESG_CAPABILITIES, + MESG_FIELD_CAPABILITIES, + MESG_DEVICE_SETTINGS, + MESG_USER_PROFILE, + MESG_HRM_PROFILE, + MESG_SDM_PROFILE, + MESG_BIKE_PROFILE, + MESG_CONNECTIVITY, + MESG_WATCHFACE_SETTINGS, + MESG_OHR_SETTINGS, + MESG_ZONES_TARGET, + MESG_SPORT, + MESG_HR_ZONE, + MESG_SPEED_ZONE, + MESG_CADENCE_ZONE, + MESG_POWER_ZONE, + MESG_MET_ZONE, + MESG_DIVE_SETTINGS, + MESG_DIVE_ALARM, + MESG_DIVE_GAS, + MESG_GOAL, + MESG_ACTIVITY, + MESG_SESSION, + MESG_LAP, + MESG_LENGTH, + MESG_RECORD, + MESG_EVENT, + MESG_DEVICE_INFO, + MESG_DEVICE_AUX_BATTERY_INFO, + MESG_TRAINING_FILE, + MESG_WEATHER_CONDITIONS, + MESG_WEATHER_ALERT, + MESG_GPS_METADATA, + MESG_CAMERA_EVENT, + MESG_GYROSCOPE_DATA, + MESG_ACCELEROMETER_DATA, + MESG_MAGNETOMETER_DATA, + MESG_BAROMETER_DATA, + MESG_THREE_D_SENSOR_CALIBRATION, + MESG_ONE_D_SENSOR_CALIBRATION, + MESG_VIDEO_FRAME, + MESG_OBDII_DATA, + MESG_NMEA_SENTENCE, + MESG_AVIATION_ATTITUDE, + MESG_VIDEO, + MESG_VIDEO_TITLE, + MESG_VIDEO_DESCRIPTION, + MESG_VIDEO_CLIP, + MESG_SET, + MESG_JUMP, + MESG_CLIMB_PRO, + MESG_FIELD_DESCRIPTION, + MESG_DEVELOPER_DATA_ID, + MESG_COURSE, + MESG_COURSE_POINT, + MESG_SEGMENT_ID, + MESG_SEGMENT_LEADERBOARD_ENTRY, + MESG_SEGMENT_POINT, + MESG_SEGMENT_LAP, + MESG_SEGMENT_FILE, + MESG_WORKOUT, + MESG_WORKOUT_SESSION, + MESG_WORKOUT_STEP, + MESG_EXERCISE_TITLE, + MESG_SCHEDULE, + MESG_TOTALS, + MESG_WEIGHT_SCALE, + MESG_BLOOD_PRESSURE, + MESG_MONITORING_INFO, + MESG_MONITORING, + MESG_HR, + MESG_STRESS_LEVEL, + MESG_MEMO_GLOB, + MESG_ANT_CHANNEL_ID, + MESG_ANT_RX, + MESG_ANT_TX, + MESG_EXD_SCREEN_CONFIGURATION, + MESG_EXD_DATA_FIELD_CONFIGURATION, + MESG_EXD_DATA_CONCEPT_CONFIGURATION, + MESG_DIVE_SUMMARY, + MESG_HRV, + MESG_PAD, + MESGS + } MESG_INDEX; + + typedef enum + { + FILE_ID_MESG_TYPE, + FILE_ID_MESG_MANUFACTURER, + FILE_ID_MESG_PRODUCT, + FILE_ID_MESG_SERIAL_NUMBER, + FILE_ID_MESG_TIME_CREATED, + FILE_ID_MESG_NUMBER, + FILE_ID_MESG_PRODUCT_NAME, + FILE_ID_MESG_FIELDS + } FILE_ID_MESG_FIELD_INDEX; + + typedef enum + { + FILE_ID_MESG_PRODUCT_FIELD_FAVERO_PRODUCT, + FILE_ID_MESG_PRODUCT_FIELD_GARMIN_PRODUCT, + FILE_ID_MESG_PRODUCT_FIELD_SUBFIELDS, + FILE_ID_MESG_PRODUCT_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + FILE_ID_MESG_PRODUCT_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } FILE_ID_MESG_PRODUCT_FIELD_SUBFIELD_INDEX; + + typedef enum + { + FILE_CREATOR_MESG_SOFTWARE_VERSION, + FILE_CREATOR_MESG_HARDWARE_VERSION, + FILE_CREATOR_MESG_FIELDS + } FILE_CREATOR_MESG_FIELD_INDEX; + + typedef enum + { + TIMESTAMP_CORRELATION_MESG_TIMESTAMP, + TIMESTAMP_CORRELATION_MESG_FRACTIONAL_TIMESTAMP, + TIMESTAMP_CORRELATION_MESG_SYSTEM_TIMESTAMP, + TIMESTAMP_CORRELATION_MESG_FRACTIONAL_SYSTEM_TIMESTAMP, + TIMESTAMP_CORRELATION_MESG_LOCAL_TIMESTAMP, + TIMESTAMP_CORRELATION_MESG_TIMESTAMP_MS, + TIMESTAMP_CORRELATION_MESG_SYSTEM_TIMESTAMP_MS, + TIMESTAMP_CORRELATION_MESG_FIELDS + } TIMESTAMP_CORRELATION_MESG_FIELD_INDEX; + + typedef enum + { + SOFTWARE_MESG_MESSAGE_INDEX, + SOFTWARE_MESG_VERSION, + SOFTWARE_MESG_PART_NUMBER, + SOFTWARE_MESG_FIELDS + } SOFTWARE_MESG_FIELD_INDEX; + + typedef enum + { + SLAVE_DEVICE_MESG_MANUFACTURER, + SLAVE_DEVICE_MESG_PRODUCT, + SLAVE_DEVICE_MESG_FIELDS + } SLAVE_DEVICE_MESG_FIELD_INDEX; + + typedef enum + { + SLAVE_DEVICE_MESG_PRODUCT_FIELD_FAVERO_PRODUCT, + SLAVE_DEVICE_MESG_PRODUCT_FIELD_GARMIN_PRODUCT, + SLAVE_DEVICE_MESG_PRODUCT_FIELD_SUBFIELDS, + SLAVE_DEVICE_MESG_PRODUCT_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + SLAVE_DEVICE_MESG_PRODUCT_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } SLAVE_DEVICE_MESG_PRODUCT_FIELD_SUBFIELD_INDEX; + + typedef enum + { + CAPABILITIES_MESG_LANGUAGES, + CAPABILITIES_MESG_SPORTS, + CAPABILITIES_MESG_WORKOUTS_SUPPORTED, + CAPABILITIES_MESG_CONNECTIVITY_SUPPORTED, + CAPABILITIES_MESG_FIELDS + } CAPABILITIES_MESG_FIELD_INDEX; + + typedef enum + { + FILE_CAPABILITIES_MESG_MESSAGE_INDEX, + FILE_CAPABILITIES_MESG_TYPE, + FILE_CAPABILITIES_MESG_FLAGS, + FILE_CAPABILITIES_MESG_DIRECTORY, + FILE_CAPABILITIES_MESG_MAX_COUNT, + FILE_CAPABILITIES_MESG_MAX_SIZE, + FILE_CAPABILITIES_MESG_FIELDS + } FILE_CAPABILITIES_MESG_FIELD_INDEX; + + typedef enum + { + MESG_CAPABILITIES_MESG_MESSAGE_INDEX, + MESG_CAPABILITIES_MESG_FILE, + MESG_CAPABILITIES_MESG_MESG_NUM, + MESG_CAPABILITIES_MESG_COUNT_TYPE, + MESG_CAPABILITIES_MESG_COUNT, + MESG_CAPABILITIES_MESG_FIELDS + } MESG_CAPABILITIES_MESG_FIELD_INDEX; + + typedef enum + { + MESG_CAPABILITIES_MESG_COUNT_FIELD_NUM_PER_FILE, + MESG_CAPABILITIES_MESG_COUNT_FIELD_MAX_PER_FILE, + MESG_CAPABILITIES_MESG_COUNT_FIELD_MAX_PER_FILE_TYPE, + MESG_CAPABILITIES_MESG_COUNT_FIELD_SUBFIELDS, + MESG_CAPABILITIES_MESG_COUNT_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + MESG_CAPABILITIES_MESG_COUNT_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } MESG_CAPABILITIES_MESG_COUNT_FIELD_SUBFIELD_INDEX; + + typedef enum + { + FIELD_CAPABILITIES_MESG_MESSAGE_INDEX, + FIELD_CAPABILITIES_MESG_FILE, + FIELD_CAPABILITIES_MESG_MESG_NUM, + FIELD_CAPABILITIES_MESG_FIELD_NUM, + FIELD_CAPABILITIES_MESG_COUNT, + FIELD_CAPABILITIES_MESG_FIELDS + } FIELD_CAPABILITIES_MESG_FIELD_INDEX; + + typedef enum + { + DEVICE_SETTINGS_MESG_ACTIVE_TIME_ZONE, + DEVICE_SETTINGS_MESG_UTC_OFFSET, + DEVICE_SETTINGS_MESG_TIME_OFFSET, + DEVICE_SETTINGS_MESG_TIME_MODE, + DEVICE_SETTINGS_MESG_TIME_ZONE_OFFSET, + DEVICE_SETTINGS_MESG_BACKLIGHT_MODE, + DEVICE_SETTINGS_MESG_ACTIVITY_TRACKER_ENABLED, + DEVICE_SETTINGS_MESG_CLOCK_TIME, + DEVICE_SETTINGS_MESG_PAGES_ENABLED, + DEVICE_SETTINGS_MESG_MOVE_ALERT_ENABLED, + DEVICE_SETTINGS_MESG_DATE_MODE, + DEVICE_SETTINGS_MESG_DISPLAY_ORIENTATION, + DEVICE_SETTINGS_MESG_MOUNTING_SIDE, + DEVICE_SETTINGS_MESG_DEFAULT_PAGE, + DEVICE_SETTINGS_MESG_AUTOSYNC_MIN_STEPS, + DEVICE_SETTINGS_MESG_AUTOSYNC_MIN_TIME, + DEVICE_SETTINGS_MESG_LACTATE_THRESHOLD_AUTODETECT_ENABLED, + DEVICE_SETTINGS_MESG_BLE_AUTO_UPLOAD_ENABLED, + DEVICE_SETTINGS_MESG_AUTO_SYNC_FREQUENCY, + DEVICE_SETTINGS_MESG_AUTO_ACTIVITY_DETECT, + DEVICE_SETTINGS_MESG_NUMBER_OF_SCREENS, + DEVICE_SETTINGS_MESG_SMART_NOTIFICATION_DISPLAY_ORIENTATION, + DEVICE_SETTINGS_MESG_TAP_INTERFACE, + DEVICE_SETTINGS_MESG_TAP_SENSITIVITY, + DEVICE_SETTINGS_MESG_FIELDS + } DEVICE_SETTINGS_MESG_FIELD_INDEX; + + typedef enum + { + USER_PROFILE_MESG_MESSAGE_INDEX, + USER_PROFILE_MESG_FRIENDLY_NAME, + USER_PROFILE_MESG_GENDER, + USER_PROFILE_MESG_AGE, + USER_PROFILE_MESG_HEIGHT, + USER_PROFILE_MESG_WEIGHT, + USER_PROFILE_MESG_LANGUAGE, + USER_PROFILE_MESG_ELEV_SETTING, + USER_PROFILE_MESG_WEIGHT_SETTING, + USER_PROFILE_MESG_RESTING_HEART_RATE, + USER_PROFILE_MESG_DEFAULT_MAX_RUNNING_HEART_RATE, + USER_PROFILE_MESG_DEFAULT_MAX_BIKING_HEART_RATE, + USER_PROFILE_MESG_DEFAULT_MAX_HEART_RATE, + USER_PROFILE_MESG_HR_SETTING, + USER_PROFILE_MESG_SPEED_SETTING, + USER_PROFILE_MESG_DIST_SETTING, + USER_PROFILE_MESG_POWER_SETTING, + USER_PROFILE_MESG_ACTIVITY_CLASS, + USER_PROFILE_MESG_POSITION_SETTING, + USER_PROFILE_MESG_TEMPERATURE_SETTING, + USER_PROFILE_MESG_LOCAL_ID, + USER_PROFILE_MESG_GLOBAL_ID, + USER_PROFILE_MESG_WAKE_TIME, + USER_PROFILE_MESG_SLEEP_TIME, + USER_PROFILE_MESG_HEIGHT_SETTING, + USER_PROFILE_MESG_USER_RUNNING_STEP_LENGTH, + USER_PROFILE_MESG_USER_WALKING_STEP_LENGTH, + USER_PROFILE_MESG_DEPTH_SETTING, + USER_PROFILE_MESG_DIVE_COUNT, + USER_PROFILE_MESG_FIELDS + } USER_PROFILE_MESG_FIELD_INDEX; + + typedef enum + { + HRM_PROFILE_MESG_MESSAGE_INDEX, + HRM_PROFILE_MESG_ENABLED, + HRM_PROFILE_MESG_HRM_ANT_ID, + HRM_PROFILE_MESG_LOG_HRV, + HRM_PROFILE_MESG_HRM_ANT_ID_TRANS_TYPE, + HRM_PROFILE_MESG_FIELDS + } HRM_PROFILE_MESG_FIELD_INDEX; + + typedef enum + { + SDM_PROFILE_MESG_MESSAGE_INDEX, + SDM_PROFILE_MESG_ENABLED, + SDM_PROFILE_MESG_SDM_ANT_ID, + SDM_PROFILE_MESG_SDM_CAL_FACTOR, + SDM_PROFILE_MESG_ODOMETER, + SDM_PROFILE_MESG_SPEED_SOURCE, + SDM_PROFILE_MESG_SDM_ANT_ID_TRANS_TYPE, + SDM_PROFILE_MESG_ODOMETER_ROLLOVER, + SDM_PROFILE_MESG_FIELDS + } SDM_PROFILE_MESG_FIELD_INDEX; + + typedef enum + { + BIKE_PROFILE_MESG_MESSAGE_INDEX, + BIKE_PROFILE_MESG_NAME, + BIKE_PROFILE_MESG_SPORT, + BIKE_PROFILE_MESG_SUB_SPORT, + BIKE_PROFILE_MESG_ODOMETER, + BIKE_PROFILE_MESG_BIKE_SPD_ANT_ID, + BIKE_PROFILE_MESG_BIKE_CAD_ANT_ID, + BIKE_PROFILE_MESG_BIKE_SPDCAD_ANT_ID, + BIKE_PROFILE_MESG_BIKE_POWER_ANT_ID, + BIKE_PROFILE_MESG_CUSTOM_WHEELSIZE, + BIKE_PROFILE_MESG_AUTO_WHEELSIZE, + BIKE_PROFILE_MESG_BIKE_WEIGHT, + BIKE_PROFILE_MESG_POWER_CAL_FACTOR, + BIKE_PROFILE_MESG_AUTO_WHEEL_CAL, + BIKE_PROFILE_MESG_AUTO_POWER_ZERO, + BIKE_PROFILE_MESG_ID, + BIKE_PROFILE_MESG_SPD_ENABLED, + BIKE_PROFILE_MESG_CAD_ENABLED, + BIKE_PROFILE_MESG_SPDCAD_ENABLED, + BIKE_PROFILE_MESG_POWER_ENABLED, + BIKE_PROFILE_MESG_CRANK_LENGTH, + BIKE_PROFILE_MESG_ENABLED, + BIKE_PROFILE_MESG_BIKE_SPD_ANT_ID_TRANS_TYPE, + BIKE_PROFILE_MESG_BIKE_CAD_ANT_ID_TRANS_TYPE, + BIKE_PROFILE_MESG_BIKE_SPDCAD_ANT_ID_TRANS_TYPE, + BIKE_PROFILE_MESG_BIKE_POWER_ANT_ID_TRANS_TYPE, + BIKE_PROFILE_MESG_ODOMETER_ROLLOVER, + BIKE_PROFILE_MESG_FRONT_GEAR_NUM, + BIKE_PROFILE_MESG_FRONT_GEAR, + BIKE_PROFILE_MESG_REAR_GEAR_NUM, + BIKE_PROFILE_MESG_REAR_GEAR, + BIKE_PROFILE_MESG_SHIMANO_DI2_ENABLED, + BIKE_PROFILE_MESG_FIELDS + } BIKE_PROFILE_MESG_FIELD_INDEX; + + typedef enum + { + CONNECTIVITY_MESG_BLUETOOTH_ENABLED, + CONNECTIVITY_MESG_BLUETOOTH_LE_ENABLED, + CONNECTIVITY_MESG_ANT_ENABLED, + CONNECTIVITY_MESG_NAME, + CONNECTIVITY_MESG_LIVE_TRACKING_ENABLED, + CONNECTIVITY_MESG_WEATHER_CONDITIONS_ENABLED, + CONNECTIVITY_MESG_WEATHER_ALERTS_ENABLED, + CONNECTIVITY_MESG_AUTO_ACTIVITY_UPLOAD_ENABLED, + CONNECTIVITY_MESG_COURSE_DOWNLOAD_ENABLED, + CONNECTIVITY_MESG_WORKOUT_DOWNLOAD_ENABLED, + CONNECTIVITY_MESG_GPS_EPHEMERIS_DOWNLOAD_ENABLED, + CONNECTIVITY_MESG_INCIDENT_DETECTION_ENABLED, + CONNECTIVITY_MESG_GROUPTRACK_ENABLED, + CONNECTIVITY_MESG_FIELDS + } CONNECTIVITY_MESG_FIELD_INDEX; + + typedef enum + { + WATCHFACE_SETTINGS_MESG_MESSAGE_INDEX, + WATCHFACE_SETTINGS_MESG_MODE, + WATCHFACE_SETTINGS_MESG_LAYOUT, + WATCHFACE_SETTINGS_MESG_FIELDS + } WATCHFACE_SETTINGS_MESG_FIELD_INDEX; + + typedef enum + { + WATCHFACE_SETTINGS_MESG_LAYOUT_FIELD_DIGITAL_LAYOUT, + WATCHFACE_SETTINGS_MESG_LAYOUT_FIELD_ANALOG_LAYOUT, + WATCHFACE_SETTINGS_MESG_LAYOUT_FIELD_SUBFIELDS, + WATCHFACE_SETTINGS_MESG_LAYOUT_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WATCHFACE_SETTINGS_MESG_LAYOUT_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WATCHFACE_SETTINGS_MESG_LAYOUT_FIELD_SUBFIELD_INDEX; + + typedef enum + { + OHR_SETTINGS_MESG_TIMESTAMP, + OHR_SETTINGS_MESG_ENABLED, + OHR_SETTINGS_MESG_FIELDS + } OHR_SETTINGS_MESG_FIELD_INDEX; + + typedef enum + { + ZONES_TARGET_MESG_MAX_HEART_RATE, + ZONES_TARGET_MESG_THRESHOLD_HEART_RATE, + ZONES_TARGET_MESG_FUNCTIONAL_THRESHOLD_POWER, + ZONES_TARGET_MESG_HR_CALC_TYPE, + ZONES_TARGET_MESG_PWR_CALC_TYPE, + ZONES_TARGET_MESG_FIELDS + } ZONES_TARGET_MESG_FIELD_INDEX; + + typedef enum + { + SPORT_MESG_SPORT, + SPORT_MESG_SUB_SPORT, + SPORT_MESG_NAME, + SPORT_MESG_FIELDS + } SPORT_MESG_FIELD_INDEX; + + typedef enum + { + HR_ZONE_MESG_MESSAGE_INDEX, + HR_ZONE_MESG_HIGH_BPM, + HR_ZONE_MESG_NAME, + HR_ZONE_MESG_FIELDS + } HR_ZONE_MESG_FIELD_INDEX; + + typedef enum + { + SPEED_ZONE_MESG_MESSAGE_INDEX, + SPEED_ZONE_MESG_HIGH_VALUE, + SPEED_ZONE_MESG_NAME, + SPEED_ZONE_MESG_FIELDS + } SPEED_ZONE_MESG_FIELD_INDEX; + + typedef enum + { + CADENCE_ZONE_MESG_MESSAGE_INDEX, + CADENCE_ZONE_MESG_HIGH_VALUE, + CADENCE_ZONE_MESG_NAME, + CADENCE_ZONE_MESG_FIELDS + } CADENCE_ZONE_MESG_FIELD_INDEX; + + typedef enum + { + POWER_ZONE_MESG_MESSAGE_INDEX, + POWER_ZONE_MESG_HIGH_VALUE, + POWER_ZONE_MESG_NAME, + POWER_ZONE_MESG_FIELDS + } POWER_ZONE_MESG_FIELD_INDEX; + + typedef enum + { + MET_ZONE_MESG_MESSAGE_INDEX, + MET_ZONE_MESG_HIGH_BPM, + MET_ZONE_MESG_CALORIES, + MET_ZONE_MESG_FAT_CALORIES, + MET_ZONE_MESG_FIELDS + } MET_ZONE_MESG_FIELD_INDEX; + + typedef enum + { + DIVE_SETTINGS_MESG_MESSAGE_INDEX, + DIVE_SETTINGS_MESG_NAME, + DIVE_SETTINGS_MESG_MODEL, + DIVE_SETTINGS_MESG_GF_LOW, + DIVE_SETTINGS_MESG_GF_HIGH, + DIVE_SETTINGS_MESG_WATER_TYPE, + DIVE_SETTINGS_MESG_WATER_DENSITY, + DIVE_SETTINGS_MESG_PO2_WARN, + DIVE_SETTINGS_MESG_PO2_CRITICAL, + DIVE_SETTINGS_MESG_PO2_DECO, + DIVE_SETTINGS_MESG_SAFETY_STOP_ENABLED, + DIVE_SETTINGS_MESG_BOTTOM_DEPTH, + DIVE_SETTINGS_MESG_BOTTOM_TIME, + DIVE_SETTINGS_MESG_APNEA_COUNTDOWN_ENABLED, + DIVE_SETTINGS_MESG_APNEA_COUNTDOWN_TIME, + DIVE_SETTINGS_MESG_BACKLIGHT_MODE, + DIVE_SETTINGS_MESG_BACKLIGHT_BRIGHTNESS, + DIVE_SETTINGS_MESG_BACKLIGHT_TIMEOUT, + DIVE_SETTINGS_MESG_REPEAT_DIVE_INTERVAL, + DIVE_SETTINGS_MESG_SAFETY_STOP_TIME, + DIVE_SETTINGS_MESG_HEART_RATE_SOURCE_TYPE, + DIVE_SETTINGS_MESG_HEART_RATE_SOURCE, + DIVE_SETTINGS_MESG_FIELDS + } DIVE_SETTINGS_MESG_FIELD_INDEX; + + typedef enum + { + DIVE_SETTINGS_MESG_HEART_RATE_SOURCE_FIELD_HEART_RATE_ANTPLUS_DEVICE_TYPE, + DIVE_SETTINGS_MESG_HEART_RATE_SOURCE_FIELD_HEART_RATE_LOCAL_DEVICE_TYPE, + DIVE_SETTINGS_MESG_HEART_RATE_SOURCE_FIELD_SUBFIELDS, + DIVE_SETTINGS_MESG_HEART_RATE_SOURCE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + DIVE_SETTINGS_MESG_HEART_RATE_SOURCE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } DIVE_SETTINGS_MESG_HEART_RATE_SOURCE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + DIVE_ALARM_MESG_MESSAGE_INDEX, + DIVE_ALARM_MESG_DEPTH, + DIVE_ALARM_MESG_TIME, + DIVE_ALARM_MESG_ENABLED, + DIVE_ALARM_MESG_ALARM_TYPE, + DIVE_ALARM_MESG_SOUND, + DIVE_ALARM_MESG_DIVE_TYPES, + DIVE_ALARM_MESG_FIELDS + } DIVE_ALARM_MESG_FIELD_INDEX; + + typedef enum + { + DIVE_GAS_MESG_MESSAGE_INDEX, + DIVE_GAS_MESG_HELIUM_CONTENT, + DIVE_GAS_MESG_OXYGEN_CONTENT, + DIVE_GAS_MESG_STATUS, + DIVE_GAS_MESG_FIELDS + } DIVE_GAS_MESG_FIELD_INDEX; + + typedef enum + { + GOAL_MESG_MESSAGE_INDEX, + GOAL_MESG_SPORT, + GOAL_MESG_SUB_SPORT, + GOAL_MESG_START_DATE, + GOAL_MESG_END_DATE, + GOAL_MESG_TYPE, + GOAL_MESG_VALUE, + GOAL_MESG_REPEAT, + GOAL_MESG_TARGET_VALUE, + GOAL_MESG_RECURRENCE, + GOAL_MESG_RECURRENCE_VALUE, + GOAL_MESG_ENABLED, + GOAL_MESG_SOURCE, + GOAL_MESG_FIELDS + } GOAL_MESG_FIELD_INDEX; + + typedef enum + { + ACTIVITY_MESG_TIMESTAMP, + ACTIVITY_MESG_TOTAL_TIMER_TIME, + ACTIVITY_MESG_NUM_SESSIONS, + ACTIVITY_MESG_TYPE, + ACTIVITY_MESG_EVENT, + ACTIVITY_MESG_EVENT_TYPE, + ACTIVITY_MESG_LOCAL_TIMESTAMP, + ACTIVITY_MESG_EVENT_GROUP, + ACTIVITY_MESG_FIELDS + } ACTIVITY_MESG_FIELD_INDEX; + + typedef enum + { + SESSION_MESG_MESSAGE_INDEX, + SESSION_MESG_TIMESTAMP, + SESSION_MESG_EVENT, + SESSION_MESG_EVENT_TYPE, + SESSION_MESG_START_TIME, + SESSION_MESG_START_POSITION_LAT, + SESSION_MESG_START_POSITION_LONG, + SESSION_MESG_SPORT, + SESSION_MESG_SUB_SPORT, + SESSION_MESG_TOTAL_ELAPSED_TIME, + SESSION_MESG_TOTAL_TIMER_TIME, + SESSION_MESG_TOTAL_DISTANCE, + SESSION_MESG_TOTAL_CYCLES, + SESSION_MESG_TOTAL_CALORIES, + SESSION_MESG_TOTAL_FAT_CALORIES, + SESSION_MESG_AVG_SPEED, + SESSION_MESG_MAX_SPEED, + SESSION_MESG_AVG_HEART_RATE, + SESSION_MESG_MAX_HEART_RATE, + SESSION_MESG_AVG_CADENCE, + SESSION_MESG_MAX_CADENCE, + SESSION_MESG_AVG_POWER, + SESSION_MESG_MAX_POWER, + SESSION_MESG_TOTAL_ASCENT, + SESSION_MESG_TOTAL_DESCENT, + SESSION_MESG_TOTAL_TRAINING_EFFECT, + SESSION_MESG_FIRST_LAP_INDEX, + SESSION_MESG_NUM_LAPS, + SESSION_MESG_EVENT_GROUP, + SESSION_MESG_TRIGGER, + SESSION_MESG_NEC_LAT, + SESSION_MESG_NEC_LONG, + SESSION_MESG_SWC_LAT, + SESSION_MESG_SWC_LONG, + SESSION_MESG_NUM_LENGTHS, + SESSION_MESG_NORMALIZED_POWER, + SESSION_MESG_TRAINING_STRESS_SCORE, + SESSION_MESG_INTENSITY_FACTOR, + SESSION_MESG_LEFT_RIGHT_BALANCE, + SESSION_MESG_AVG_STROKE_COUNT, + SESSION_MESG_AVG_STROKE_DISTANCE, + SESSION_MESG_SWIM_STROKE, + SESSION_MESG_POOL_LENGTH, + SESSION_MESG_THRESHOLD_POWER, + SESSION_MESG_POOL_LENGTH_UNIT, + SESSION_MESG_NUM_ACTIVE_LENGTHS, + SESSION_MESG_TOTAL_WORK, + SESSION_MESG_AVG_ALTITUDE, + SESSION_MESG_MAX_ALTITUDE, + SESSION_MESG_GPS_ACCURACY, + SESSION_MESG_AVG_GRADE, + SESSION_MESG_AVG_POS_GRADE, + SESSION_MESG_AVG_NEG_GRADE, + SESSION_MESG_MAX_POS_GRADE, + SESSION_MESG_MAX_NEG_GRADE, + SESSION_MESG_AVG_TEMPERATURE, + SESSION_MESG_MAX_TEMPERATURE, + SESSION_MESG_TOTAL_MOVING_TIME, + SESSION_MESG_AVG_POS_VERTICAL_SPEED, + SESSION_MESG_AVG_NEG_VERTICAL_SPEED, + SESSION_MESG_MAX_POS_VERTICAL_SPEED, + SESSION_MESG_MAX_NEG_VERTICAL_SPEED, + SESSION_MESG_MIN_HEART_RATE, + SESSION_MESG_TIME_IN_HR_ZONE, + SESSION_MESG_TIME_IN_SPEED_ZONE, + SESSION_MESG_TIME_IN_CADENCE_ZONE, + SESSION_MESG_TIME_IN_POWER_ZONE, + SESSION_MESG_AVG_LAP_TIME, + SESSION_MESG_BEST_LAP_INDEX, + SESSION_MESG_MIN_ALTITUDE, + SESSION_MESG_PLAYER_SCORE, + SESSION_MESG_OPPONENT_SCORE, + SESSION_MESG_OPPONENT_NAME, + SESSION_MESG_STROKE_COUNT, + SESSION_MESG_ZONE_COUNT, + SESSION_MESG_MAX_BALL_SPEED, + SESSION_MESG_AVG_BALL_SPEED, + SESSION_MESG_AVG_VERTICAL_OSCILLATION, + SESSION_MESG_AVG_STANCE_TIME_PERCENT, + SESSION_MESG_AVG_STANCE_TIME, + SESSION_MESG_AVG_FRACTIONAL_CADENCE, + SESSION_MESG_MAX_FRACTIONAL_CADENCE, + SESSION_MESG_TOTAL_FRACTIONAL_CYCLES, + SESSION_MESG_AVG_TOTAL_HEMOGLOBIN_CONC, + SESSION_MESG_MIN_TOTAL_HEMOGLOBIN_CONC, + SESSION_MESG_MAX_TOTAL_HEMOGLOBIN_CONC, + SESSION_MESG_AVG_SATURATED_HEMOGLOBIN_PERCENT, + SESSION_MESG_MIN_SATURATED_HEMOGLOBIN_PERCENT, + SESSION_MESG_MAX_SATURATED_HEMOGLOBIN_PERCENT, + SESSION_MESG_AVG_LEFT_TORQUE_EFFECTIVENESS, + SESSION_MESG_AVG_RIGHT_TORQUE_EFFECTIVENESS, + SESSION_MESG_AVG_LEFT_PEDAL_SMOOTHNESS, + SESSION_MESG_AVG_RIGHT_PEDAL_SMOOTHNESS, + SESSION_MESG_AVG_COMBINED_PEDAL_SMOOTHNESS, + SESSION_MESG_SPORT_INDEX, + SESSION_MESG_TIME_STANDING, + SESSION_MESG_STAND_COUNT, + SESSION_MESG_AVG_LEFT_PCO, + SESSION_MESG_AVG_RIGHT_PCO, + SESSION_MESG_AVG_LEFT_POWER_PHASE, + SESSION_MESG_AVG_LEFT_POWER_PHASE_PEAK, + SESSION_MESG_AVG_RIGHT_POWER_PHASE, + SESSION_MESG_AVG_RIGHT_POWER_PHASE_PEAK, + SESSION_MESG_AVG_POWER_POSITION, + SESSION_MESG_MAX_POWER_POSITION, + SESSION_MESG_AVG_CADENCE_POSITION, + SESSION_MESG_MAX_CADENCE_POSITION, + SESSION_MESG_ENHANCED_AVG_SPEED, + SESSION_MESG_ENHANCED_MAX_SPEED, + SESSION_MESG_ENHANCED_AVG_ALTITUDE, + SESSION_MESG_ENHANCED_MIN_ALTITUDE, + SESSION_MESG_ENHANCED_MAX_ALTITUDE, + SESSION_MESG_AVG_LEV_MOTOR_POWER, + SESSION_MESG_MAX_LEV_MOTOR_POWER, + SESSION_MESG_LEV_BATTERY_CONSUMPTION, + SESSION_MESG_AVG_VERTICAL_RATIO, + SESSION_MESG_AVG_STANCE_TIME_BALANCE, + SESSION_MESG_AVG_STEP_LENGTH, + SESSION_MESG_TOTAL_ANAEROBIC_TRAINING_EFFECT, + SESSION_MESG_AVG_VAM, + SESSION_MESG_TRAINING_LOAD_PEAK, + SESSION_MESG_TOTAL_GRIT, + SESSION_MESG_TOTAL_FLOW, + SESSION_MESG_JUMP_COUNT, + SESSION_MESG_AVG_GRIT, + SESSION_MESG_AVG_FLOW, + SESSION_MESG_TOTAL_FRACTIONAL_ASCENT, + SESSION_MESG_TOTAL_FRACTIONAL_DESCENT, + SESSION_MESG_AVG_CORE_TEMPERATURE, + SESSION_MESG_MIN_CORE_TEMPERATURE, + SESSION_MESG_MAX_CORE_TEMPERATURE, + SESSION_MESG_FIELDS + } SESSION_MESG_FIELD_INDEX; + + typedef enum + { + SESSION_MESG_TOTAL_CYCLES_FIELD_TOTAL_STRIDES, + SESSION_MESG_TOTAL_CYCLES_FIELD_TOTAL_STROKES, + SESSION_MESG_TOTAL_CYCLES_FIELD_SUBFIELDS, + SESSION_MESG_TOTAL_CYCLES_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + SESSION_MESG_TOTAL_CYCLES_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } SESSION_MESG_TOTAL_CYCLES_FIELD_SUBFIELD_INDEX; + + typedef enum + { + SESSION_MESG_AVG_CADENCE_FIELD_AVG_RUNNING_CADENCE, + SESSION_MESG_AVG_CADENCE_FIELD_SUBFIELDS, + SESSION_MESG_AVG_CADENCE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + SESSION_MESG_AVG_CADENCE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } SESSION_MESG_AVG_CADENCE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + SESSION_MESG_MAX_CADENCE_FIELD_MAX_RUNNING_CADENCE, + SESSION_MESG_MAX_CADENCE_FIELD_SUBFIELDS, + SESSION_MESG_MAX_CADENCE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + SESSION_MESG_MAX_CADENCE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } SESSION_MESG_MAX_CADENCE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + LAP_MESG_MESSAGE_INDEX, + LAP_MESG_TIMESTAMP, + LAP_MESG_EVENT, + LAP_MESG_EVENT_TYPE, + LAP_MESG_START_TIME, + LAP_MESG_START_POSITION_LAT, + LAP_MESG_START_POSITION_LONG, + LAP_MESG_END_POSITION_LAT, + LAP_MESG_END_POSITION_LONG, + LAP_MESG_TOTAL_ELAPSED_TIME, + LAP_MESG_TOTAL_TIMER_TIME, + LAP_MESG_TOTAL_DISTANCE, + LAP_MESG_TOTAL_CYCLES, + LAP_MESG_TOTAL_CALORIES, + LAP_MESG_TOTAL_FAT_CALORIES, + LAP_MESG_AVG_SPEED, + LAP_MESG_MAX_SPEED, + LAP_MESG_AVG_HEART_RATE, + LAP_MESG_MAX_HEART_RATE, + LAP_MESG_AVG_CADENCE, + LAP_MESG_MAX_CADENCE, + LAP_MESG_AVG_POWER, + LAP_MESG_MAX_POWER, + LAP_MESG_TOTAL_ASCENT, + LAP_MESG_TOTAL_DESCENT, + LAP_MESG_INTENSITY, + LAP_MESG_LAP_TRIGGER, + LAP_MESG_SPORT, + LAP_MESG_EVENT_GROUP, + LAP_MESG_NUM_LENGTHS, + LAP_MESG_NORMALIZED_POWER, + LAP_MESG_LEFT_RIGHT_BALANCE, + LAP_MESG_FIRST_LENGTH_INDEX, + LAP_MESG_AVG_STROKE_DISTANCE, + LAP_MESG_SWIM_STROKE, + LAP_MESG_SUB_SPORT, + LAP_MESG_NUM_ACTIVE_LENGTHS, + LAP_MESG_TOTAL_WORK, + LAP_MESG_AVG_ALTITUDE, + LAP_MESG_MAX_ALTITUDE, + LAP_MESG_GPS_ACCURACY, + LAP_MESG_AVG_GRADE, + LAP_MESG_AVG_POS_GRADE, + LAP_MESG_AVG_NEG_GRADE, + LAP_MESG_MAX_POS_GRADE, + LAP_MESG_MAX_NEG_GRADE, + LAP_MESG_AVG_TEMPERATURE, + LAP_MESG_MAX_TEMPERATURE, + LAP_MESG_TOTAL_MOVING_TIME, + LAP_MESG_AVG_POS_VERTICAL_SPEED, + LAP_MESG_AVG_NEG_VERTICAL_SPEED, + LAP_MESG_MAX_POS_VERTICAL_SPEED, + LAP_MESG_MAX_NEG_VERTICAL_SPEED, + LAP_MESG_TIME_IN_HR_ZONE, + LAP_MESG_TIME_IN_SPEED_ZONE, + LAP_MESG_TIME_IN_CADENCE_ZONE, + LAP_MESG_TIME_IN_POWER_ZONE, + LAP_MESG_REPETITION_NUM, + LAP_MESG_MIN_ALTITUDE, + LAP_MESG_MIN_HEART_RATE, + LAP_MESG_WKT_STEP_INDEX, + LAP_MESG_OPPONENT_SCORE, + LAP_MESG_STROKE_COUNT, + LAP_MESG_ZONE_COUNT, + LAP_MESG_AVG_VERTICAL_OSCILLATION, + LAP_MESG_AVG_STANCE_TIME_PERCENT, + LAP_MESG_AVG_STANCE_TIME, + LAP_MESG_AVG_FRACTIONAL_CADENCE, + LAP_MESG_MAX_FRACTIONAL_CADENCE, + LAP_MESG_TOTAL_FRACTIONAL_CYCLES, + LAP_MESG_PLAYER_SCORE, + LAP_MESG_AVG_TOTAL_HEMOGLOBIN_CONC, + LAP_MESG_MIN_TOTAL_HEMOGLOBIN_CONC, + LAP_MESG_MAX_TOTAL_HEMOGLOBIN_CONC, + LAP_MESG_AVG_SATURATED_HEMOGLOBIN_PERCENT, + LAP_MESG_MIN_SATURATED_HEMOGLOBIN_PERCENT, + LAP_MESG_MAX_SATURATED_HEMOGLOBIN_PERCENT, + LAP_MESG_AVG_LEFT_TORQUE_EFFECTIVENESS, + LAP_MESG_AVG_RIGHT_TORQUE_EFFECTIVENESS, + LAP_MESG_AVG_LEFT_PEDAL_SMOOTHNESS, + LAP_MESG_AVG_RIGHT_PEDAL_SMOOTHNESS, + LAP_MESG_AVG_COMBINED_PEDAL_SMOOTHNESS, + LAP_MESG_TIME_STANDING, + LAP_MESG_STAND_COUNT, + LAP_MESG_AVG_LEFT_PCO, + LAP_MESG_AVG_RIGHT_PCO, + LAP_MESG_AVG_LEFT_POWER_PHASE, + LAP_MESG_AVG_LEFT_POWER_PHASE_PEAK, + LAP_MESG_AVG_RIGHT_POWER_PHASE, + LAP_MESG_AVG_RIGHT_POWER_PHASE_PEAK, + LAP_MESG_AVG_POWER_POSITION, + LAP_MESG_MAX_POWER_POSITION, + LAP_MESG_AVG_CADENCE_POSITION, + LAP_MESG_MAX_CADENCE_POSITION, + LAP_MESG_ENHANCED_AVG_SPEED, + LAP_MESG_ENHANCED_MAX_SPEED, + LAP_MESG_ENHANCED_AVG_ALTITUDE, + LAP_MESG_ENHANCED_MIN_ALTITUDE, + LAP_MESG_ENHANCED_MAX_ALTITUDE, + LAP_MESG_AVG_LEV_MOTOR_POWER, + LAP_MESG_MAX_LEV_MOTOR_POWER, + LAP_MESG_LEV_BATTERY_CONSUMPTION, + LAP_MESG_AVG_VERTICAL_RATIO, + LAP_MESG_AVG_STANCE_TIME_BALANCE, + LAP_MESG_AVG_STEP_LENGTH, + LAP_MESG_AVG_VAM, + LAP_MESG_TOTAL_GRIT, + LAP_MESG_TOTAL_FLOW, + LAP_MESG_JUMP_COUNT, + LAP_MESG_AVG_GRIT, + LAP_MESG_AVG_FLOW, + LAP_MESG_TOTAL_FRACTIONAL_ASCENT, + LAP_MESG_TOTAL_FRACTIONAL_DESCENT, + LAP_MESG_AVG_CORE_TEMPERATURE, + LAP_MESG_MIN_CORE_TEMPERATURE, + LAP_MESG_MAX_CORE_TEMPERATURE, + LAP_MESG_FIELDS + } LAP_MESG_FIELD_INDEX; + + typedef enum + { + LAP_MESG_TOTAL_CYCLES_FIELD_TOTAL_STRIDES, + LAP_MESG_TOTAL_CYCLES_FIELD_TOTAL_STROKES, + LAP_MESG_TOTAL_CYCLES_FIELD_SUBFIELDS, + LAP_MESG_TOTAL_CYCLES_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + LAP_MESG_TOTAL_CYCLES_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } LAP_MESG_TOTAL_CYCLES_FIELD_SUBFIELD_INDEX; + + typedef enum + { + LAP_MESG_AVG_CADENCE_FIELD_AVG_RUNNING_CADENCE, + LAP_MESG_AVG_CADENCE_FIELD_SUBFIELDS, + LAP_MESG_AVG_CADENCE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + LAP_MESG_AVG_CADENCE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } LAP_MESG_AVG_CADENCE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + LAP_MESG_MAX_CADENCE_FIELD_MAX_RUNNING_CADENCE, + LAP_MESG_MAX_CADENCE_FIELD_SUBFIELDS, + LAP_MESG_MAX_CADENCE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + LAP_MESG_MAX_CADENCE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } LAP_MESG_MAX_CADENCE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + LENGTH_MESG_MESSAGE_INDEX, + LENGTH_MESG_TIMESTAMP, + LENGTH_MESG_EVENT, + LENGTH_MESG_EVENT_TYPE, + LENGTH_MESG_START_TIME, + LENGTH_MESG_TOTAL_ELAPSED_TIME, + LENGTH_MESG_TOTAL_TIMER_TIME, + LENGTH_MESG_TOTAL_STROKES, + LENGTH_MESG_AVG_SPEED, + LENGTH_MESG_SWIM_STROKE, + LENGTH_MESG_AVG_SWIMMING_CADENCE, + LENGTH_MESG_EVENT_GROUP, + LENGTH_MESG_TOTAL_CALORIES, + LENGTH_MESG_LENGTH_TYPE, + LENGTH_MESG_PLAYER_SCORE, + LENGTH_MESG_OPPONENT_SCORE, + LENGTH_MESG_STROKE_COUNT, + LENGTH_MESG_ZONE_COUNT, + LENGTH_MESG_FIELDS + } LENGTH_MESG_FIELD_INDEX; + + typedef enum + { + RECORD_MESG_TIMESTAMP, + RECORD_MESG_POSITION_LAT, + RECORD_MESG_POSITION_LONG, + RECORD_MESG_ALTITUDE, + RECORD_MESG_HEART_RATE, + RECORD_MESG_CADENCE, + RECORD_MESG_DISTANCE, + RECORD_MESG_SPEED, + RECORD_MESG_POWER, + RECORD_MESG_COMPRESSED_SPEED_DISTANCE, + RECORD_MESG_GRADE, + RECORD_MESG_RESISTANCE, + RECORD_MESG_TIME_FROM_COURSE, + RECORD_MESG_CYCLE_LENGTH, + RECORD_MESG_TEMPERATURE, + RECORD_MESG_SPEED_1S, + RECORD_MESG_CYCLES, + RECORD_MESG_TOTAL_CYCLES, + RECORD_MESG_COMPRESSED_ACCUMULATED_POWER, + RECORD_MESG_ACCUMULATED_POWER, + RECORD_MESG_LEFT_RIGHT_BALANCE, + RECORD_MESG_GPS_ACCURACY, + RECORD_MESG_VERTICAL_SPEED, + RECORD_MESG_CALORIES, + RECORD_MESG_VERTICAL_OSCILLATION, + RECORD_MESG_STANCE_TIME_PERCENT, + RECORD_MESG_STANCE_TIME, + RECORD_MESG_ACTIVITY_TYPE, + RECORD_MESG_LEFT_TORQUE_EFFECTIVENESS, + RECORD_MESG_RIGHT_TORQUE_EFFECTIVENESS, + RECORD_MESG_LEFT_PEDAL_SMOOTHNESS, + RECORD_MESG_RIGHT_PEDAL_SMOOTHNESS, + RECORD_MESG_COMBINED_PEDAL_SMOOTHNESS, + RECORD_MESG_TIME128, + RECORD_MESG_STROKE_TYPE, + RECORD_MESG_ZONE, + RECORD_MESG_BALL_SPEED, + RECORD_MESG_CADENCE256, + RECORD_MESG_FRACTIONAL_CADENCE, + RECORD_MESG_TOTAL_HEMOGLOBIN_CONC, + RECORD_MESG_TOTAL_HEMOGLOBIN_CONC_MIN, + RECORD_MESG_TOTAL_HEMOGLOBIN_CONC_MAX, + RECORD_MESG_SATURATED_HEMOGLOBIN_PERCENT, + RECORD_MESG_SATURATED_HEMOGLOBIN_PERCENT_MIN, + RECORD_MESG_SATURATED_HEMOGLOBIN_PERCENT_MAX, + RECORD_MESG_DEVICE_INDEX, + RECORD_MESG_LEFT_PCO, + RECORD_MESG_RIGHT_PCO, + RECORD_MESG_LEFT_POWER_PHASE, + RECORD_MESG_LEFT_POWER_PHASE_PEAK, + RECORD_MESG_RIGHT_POWER_PHASE, + RECORD_MESG_RIGHT_POWER_PHASE_PEAK, + RECORD_MESG_ENHANCED_SPEED, + RECORD_MESG_ENHANCED_ALTITUDE, + RECORD_MESG_BATTERY_SOC, + RECORD_MESG_MOTOR_POWER, + RECORD_MESG_VERTICAL_RATIO, + RECORD_MESG_STANCE_TIME_BALANCE, + RECORD_MESG_STEP_LENGTH, + RECORD_MESG_ABSOLUTE_PRESSURE, + RECORD_MESG_DEPTH, + RECORD_MESG_NEXT_STOP_DEPTH, + RECORD_MESG_NEXT_STOP_TIME, + RECORD_MESG_TIME_TO_SURFACE, + RECORD_MESG_NDL_TIME, + RECORD_MESG_CNS_LOAD, + RECORD_MESG_N2_LOAD, + RECORD_MESG_GRIT, + RECORD_MESG_FLOW, + RECORD_MESG_EBIKE_TRAVEL_RANGE, + RECORD_MESG_EBIKE_BATTERY_LEVEL, + RECORD_MESG_EBIKE_ASSIST_MODE, + RECORD_MESG_EBIKE_ASSIST_LEVEL_PERCENT, + RECORD_MESG_CORE_TEMPERATURE, + RECORD_MESG_FIELDS + } RECORD_MESG_FIELD_INDEX; + + typedef enum + { + EVENT_MESG_TIMESTAMP, + EVENT_MESG_EVENT, + EVENT_MESG_EVENT_TYPE, + EVENT_MESG_DATA16, + EVENT_MESG_DATA, + EVENT_MESG_EVENT_GROUP, + EVENT_MESG_SCORE, + EVENT_MESG_OPPONENT_SCORE, + EVENT_MESG_FRONT_GEAR_NUM, + EVENT_MESG_FRONT_GEAR, + EVENT_MESG_REAR_GEAR_NUM, + EVENT_MESG_REAR_GEAR, + EVENT_MESG_DEVICE_INDEX, + EVENT_MESG_RADAR_THREAT_LEVEL_MAX, + EVENT_MESG_RADAR_THREAT_COUNT, + EVENT_MESG_RADAR_THREAT_AVG_APPROACH_SPEED, + EVENT_MESG_RADAR_THREAT_MAX_APPROACH_SPEED, + EVENT_MESG_FIELDS + } EVENT_MESG_FIELD_INDEX; + + typedef enum + { + EVENT_MESG_DATA_FIELD_TIMER_TRIGGER, + EVENT_MESG_DATA_FIELD_COURSE_POINT_INDEX, + EVENT_MESG_DATA_FIELD_BATTERY_LEVEL, + EVENT_MESG_DATA_FIELD_VIRTUAL_PARTNER_SPEED, + EVENT_MESG_DATA_FIELD_HR_HIGH_ALERT, + EVENT_MESG_DATA_FIELD_HR_LOW_ALERT, + EVENT_MESG_DATA_FIELD_SPEED_HIGH_ALERT, + EVENT_MESG_DATA_FIELD_SPEED_LOW_ALERT, + EVENT_MESG_DATA_FIELD_CAD_HIGH_ALERT, + EVENT_MESG_DATA_FIELD_CAD_LOW_ALERT, + EVENT_MESG_DATA_FIELD_POWER_HIGH_ALERT, + EVENT_MESG_DATA_FIELD_POWER_LOW_ALERT, + EVENT_MESG_DATA_FIELD_TIME_DURATION_ALERT, + EVENT_MESG_DATA_FIELD_DISTANCE_DURATION_ALERT, + EVENT_MESG_DATA_FIELD_CALORIE_DURATION_ALERT, + EVENT_MESG_DATA_FIELD_FITNESS_EQUIPMENT_STATE, + EVENT_MESG_DATA_FIELD_SPORT_POINT, + EVENT_MESG_DATA_FIELD_GEAR_CHANGE_DATA, + EVENT_MESG_DATA_FIELD_RIDER_POSITION, + EVENT_MESG_DATA_FIELD_COMM_TIMEOUT, + EVENT_MESG_DATA_FIELD_RADAR_THREAT_ALERT, + EVENT_MESG_DATA_FIELD_SUBFIELDS, + EVENT_MESG_DATA_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + EVENT_MESG_DATA_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } EVENT_MESG_DATA_FIELD_SUBFIELD_INDEX; + + typedef enum + { + DEVICE_INFO_MESG_TIMESTAMP, + DEVICE_INFO_MESG_DEVICE_INDEX, + DEVICE_INFO_MESG_DEVICE_TYPE, + DEVICE_INFO_MESG_MANUFACTURER, + DEVICE_INFO_MESG_SERIAL_NUMBER, + DEVICE_INFO_MESG_PRODUCT, + DEVICE_INFO_MESG_SOFTWARE_VERSION, + DEVICE_INFO_MESG_HARDWARE_VERSION, + DEVICE_INFO_MESG_CUM_OPERATING_TIME, + DEVICE_INFO_MESG_BATTERY_VOLTAGE, + DEVICE_INFO_MESG_BATTERY_STATUS, + DEVICE_INFO_MESG_SENSOR_POSITION, + DEVICE_INFO_MESG_DESCRIPTOR, + DEVICE_INFO_MESG_ANT_TRANSMISSION_TYPE, + DEVICE_INFO_MESG_ANT_DEVICE_NUMBER, + DEVICE_INFO_MESG_ANT_NETWORK, + DEVICE_INFO_MESG_SOURCE_TYPE, + DEVICE_INFO_MESG_PRODUCT_NAME, + DEVICE_INFO_MESG_BATTERY_LEVEL, + DEVICE_INFO_MESG_FIELDS + } DEVICE_INFO_MESG_FIELD_INDEX; + + typedef enum + { + DEVICE_INFO_MESG_DEVICE_TYPE_FIELD_ANTPLUS_DEVICE_TYPE, + DEVICE_INFO_MESG_DEVICE_TYPE_FIELD_ANT_DEVICE_TYPE, + DEVICE_INFO_MESG_DEVICE_TYPE_FIELD_SUBFIELDS, + DEVICE_INFO_MESG_DEVICE_TYPE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + DEVICE_INFO_MESG_DEVICE_TYPE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } DEVICE_INFO_MESG_DEVICE_TYPE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + DEVICE_INFO_MESG_PRODUCT_FIELD_FAVERO_PRODUCT, + DEVICE_INFO_MESG_PRODUCT_FIELD_GARMIN_PRODUCT, + DEVICE_INFO_MESG_PRODUCT_FIELD_SUBFIELDS, + DEVICE_INFO_MESG_PRODUCT_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + DEVICE_INFO_MESG_PRODUCT_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } DEVICE_INFO_MESG_PRODUCT_FIELD_SUBFIELD_INDEX; + + typedef enum + { + DEVICE_AUX_BATTERY_INFO_MESG_TIMESTAMP, + DEVICE_AUX_BATTERY_INFO_MESG_DEVICE_INDEX, + DEVICE_AUX_BATTERY_INFO_MESG_BATTERY_VOLTAGE, + DEVICE_AUX_BATTERY_INFO_MESG_BATTERY_STATUS, + DEVICE_AUX_BATTERY_INFO_MESG_BATTERY_IDENTIFIER, + DEVICE_AUX_BATTERY_INFO_MESG_FIELDS + } DEVICE_AUX_BATTERY_INFO_MESG_FIELD_INDEX; + + typedef enum + { + TRAINING_FILE_MESG_TIMESTAMP, + TRAINING_FILE_MESG_TYPE, + TRAINING_FILE_MESG_MANUFACTURER, + TRAINING_FILE_MESG_PRODUCT, + TRAINING_FILE_MESG_SERIAL_NUMBER, + TRAINING_FILE_MESG_TIME_CREATED, + TRAINING_FILE_MESG_FIELDS + } TRAINING_FILE_MESG_FIELD_INDEX; + + typedef enum + { + TRAINING_FILE_MESG_PRODUCT_FIELD_FAVERO_PRODUCT, + TRAINING_FILE_MESG_PRODUCT_FIELD_GARMIN_PRODUCT, + TRAINING_FILE_MESG_PRODUCT_FIELD_SUBFIELDS, + TRAINING_FILE_MESG_PRODUCT_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + TRAINING_FILE_MESG_PRODUCT_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } TRAINING_FILE_MESG_PRODUCT_FIELD_SUBFIELD_INDEX; + + typedef enum + { + WEATHER_CONDITIONS_MESG_TIMESTAMP, + WEATHER_CONDITIONS_MESG_WEATHER_REPORT, + WEATHER_CONDITIONS_MESG_TEMPERATURE, + WEATHER_CONDITIONS_MESG_CONDITION, + WEATHER_CONDITIONS_MESG_WIND_DIRECTION, + WEATHER_CONDITIONS_MESG_WIND_SPEED, + WEATHER_CONDITIONS_MESG_PRECIPITATION_PROBABILITY, + WEATHER_CONDITIONS_MESG_TEMPERATURE_FEELS_LIKE, + WEATHER_CONDITIONS_MESG_RELATIVE_HUMIDITY, + WEATHER_CONDITIONS_MESG_LOCATION, + WEATHER_CONDITIONS_MESG_OBSERVED_AT_TIME, + WEATHER_CONDITIONS_MESG_OBSERVED_LOCATION_LAT, + WEATHER_CONDITIONS_MESG_OBSERVED_LOCATION_LONG, + WEATHER_CONDITIONS_MESG_DAY_OF_WEEK, + WEATHER_CONDITIONS_MESG_HIGH_TEMPERATURE, + WEATHER_CONDITIONS_MESG_LOW_TEMPERATURE, + WEATHER_CONDITIONS_MESG_FIELDS + } WEATHER_CONDITIONS_MESG_FIELD_INDEX; + + typedef enum + { + WEATHER_ALERT_MESG_TIMESTAMP, + WEATHER_ALERT_MESG_REPORT_ID, + WEATHER_ALERT_MESG_ISSUE_TIME, + WEATHER_ALERT_MESG_EXPIRE_TIME, + WEATHER_ALERT_MESG_SEVERITY, + WEATHER_ALERT_MESG_TYPE, + WEATHER_ALERT_MESG_FIELDS + } WEATHER_ALERT_MESG_FIELD_INDEX; + + typedef enum + { + GPS_METADATA_MESG_TIMESTAMP, + GPS_METADATA_MESG_TIMESTAMP_MS, + GPS_METADATA_MESG_POSITION_LAT, + GPS_METADATA_MESG_POSITION_LONG, + GPS_METADATA_MESG_ENHANCED_ALTITUDE, + GPS_METADATA_MESG_ENHANCED_SPEED, + GPS_METADATA_MESG_HEADING, + GPS_METADATA_MESG_UTC_TIMESTAMP, + GPS_METADATA_MESG_VELOCITY, + GPS_METADATA_MESG_FIELDS + } GPS_METADATA_MESG_FIELD_INDEX; + + typedef enum + { + CAMERA_EVENT_MESG_TIMESTAMP, + CAMERA_EVENT_MESG_TIMESTAMP_MS, + CAMERA_EVENT_MESG_CAMERA_EVENT_TYPE, + CAMERA_EVENT_MESG_CAMERA_FILE_UUID, + CAMERA_EVENT_MESG_CAMERA_ORIENTATION, + CAMERA_EVENT_MESG_FIELDS + } CAMERA_EVENT_MESG_FIELD_INDEX; + + typedef enum + { + GYROSCOPE_DATA_MESG_TIMESTAMP, + GYROSCOPE_DATA_MESG_TIMESTAMP_MS, + GYROSCOPE_DATA_MESG_SAMPLE_TIME_OFFSET, + GYROSCOPE_DATA_MESG_GYRO_X, + GYROSCOPE_DATA_MESG_GYRO_Y, + GYROSCOPE_DATA_MESG_GYRO_Z, + GYROSCOPE_DATA_MESG_CALIBRATED_GYRO_X, + GYROSCOPE_DATA_MESG_CALIBRATED_GYRO_Y, + GYROSCOPE_DATA_MESG_CALIBRATED_GYRO_Z, + GYROSCOPE_DATA_MESG_FIELDS + } GYROSCOPE_DATA_MESG_FIELD_INDEX; + + typedef enum + { + ACCELEROMETER_DATA_MESG_TIMESTAMP, + ACCELEROMETER_DATA_MESG_TIMESTAMP_MS, + ACCELEROMETER_DATA_MESG_SAMPLE_TIME_OFFSET, + ACCELEROMETER_DATA_MESG_ACCEL_X, + ACCELEROMETER_DATA_MESG_ACCEL_Y, + ACCELEROMETER_DATA_MESG_ACCEL_Z, + ACCELEROMETER_DATA_MESG_CALIBRATED_ACCEL_X, + ACCELEROMETER_DATA_MESG_CALIBRATED_ACCEL_Y, + ACCELEROMETER_DATA_MESG_CALIBRATED_ACCEL_Z, + ACCELEROMETER_DATA_MESG_COMPRESSED_CALIBRATED_ACCEL_X, + ACCELEROMETER_DATA_MESG_COMPRESSED_CALIBRATED_ACCEL_Y, + ACCELEROMETER_DATA_MESG_COMPRESSED_CALIBRATED_ACCEL_Z, + ACCELEROMETER_DATA_MESG_FIELDS + } ACCELEROMETER_DATA_MESG_FIELD_INDEX; + + typedef enum + { + MAGNETOMETER_DATA_MESG_TIMESTAMP, + MAGNETOMETER_DATA_MESG_TIMESTAMP_MS, + MAGNETOMETER_DATA_MESG_SAMPLE_TIME_OFFSET, + MAGNETOMETER_DATA_MESG_MAG_X, + MAGNETOMETER_DATA_MESG_MAG_Y, + MAGNETOMETER_DATA_MESG_MAG_Z, + MAGNETOMETER_DATA_MESG_CALIBRATED_MAG_X, + MAGNETOMETER_DATA_MESG_CALIBRATED_MAG_Y, + MAGNETOMETER_DATA_MESG_CALIBRATED_MAG_Z, + MAGNETOMETER_DATA_MESG_FIELDS + } MAGNETOMETER_DATA_MESG_FIELD_INDEX; + + typedef enum + { + BAROMETER_DATA_MESG_TIMESTAMP, + BAROMETER_DATA_MESG_TIMESTAMP_MS, + BAROMETER_DATA_MESG_SAMPLE_TIME_OFFSET, + BAROMETER_DATA_MESG_BARO_PRES, + BAROMETER_DATA_MESG_FIELDS + } BAROMETER_DATA_MESG_FIELD_INDEX; + + typedef enum + { + THREE_D_SENSOR_CALIBRATION_MESG_TIMESTAMP, + THREE_D_SENSOR_CALIBRATION_MESG_SENSOR_TYPE, + THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR, + THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_DIVISOR, + THREE_D_SENSOR_CALIBRATION_MESG_LEVEL_SHIFT, + THREE_D_SENSOR_CALIBRATION_MESG_OFFSET_CAL, + THREE_D_SENSOR_CALIBRATION_MESG_ORIENTATION_MATRIX, + THREE_D_SENSOR_CALIBRATION_MESG_FIELDS + } THREE_D_SENSOR_CALIBRATION_MESG_FIELD_INDEX; + + typedef enum + { + THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_ACCEL_CAL_FACTOR, + THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_GYRO_CAL_FACTOR, + THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_SUBFIELDS, + THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } THREE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_SUBFIELD_INDEX; + + typedef enum + { + ONE_D_SENSOR_CALIBRATION_MESG_TIMESTAMP, + ONE_D_SENSOR_CALIBRATION_MESG_SENSOR_TYPE, + ONE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR, + ONE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_DIVISOR, + ONE_D_SENSOR_CALIBRATION_MESG_LEVEL_SHIFT, + ONE_D_SENSOR_CALIBRATION_MESG_OFFSET_CAL, + ONE_D_SENSOR_CALIBRATION_MESG_FIELDS + } ONE_D_SENSOR_CALIBRATION_MESG_FIELD_INDEX; + + typedef enum + { + ONE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_BARO_CAL_FACTOR, + ONE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_SUBFIELDS, + ONE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + ONE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } ONE_D_SENSOR_CALIBRATION_MESG_CALIBRATION_FACTOR_FIELD_SUBFIELD_INDEX; + + typedef enum + { + VIDEO_FRAME_MESG_TIMESTAMP, + VIDEO_FRAME_MESG_TIMESTAMP_MS, + VIDEO_FRAME_MESG_FRAME_NUMBER, + VIDEO_FRAME_MESG_FIELDS + } VIDEO_FRAME_MESG_FIELD_INDEX; + + typedef enum + { + OBDII_DATA_MESG_TIMESTAMP, + OBDII_DATA_MESG_TIMESTAMP_MS, + OBDII_DATA_MESG_TIME_OFFSET, + OBDII_DATA_MESG_PID, + OBDII_DATA_MESG_RAW_DATA, + OBDII_DATA_MESG_PID_DATA_SIZE, + OBDII_DATA_MESG_SYSTEM_TIME, + OBDII_DATA_MESG_START_TIMESTAMP, + OBDII_DATA_MESG_START_TIMESTAMP_MS, + OBDII_DATA_MESG_FIELDS + } OBDII_DATA_MESG_FIELD_INDEX; + + typedef enum + { + NMEA_SENTENCE_MESG_TIMESTAMP, + NMEA_SENTENCE_MESG_TIMESTAMP_MS, + NMEA_SENTENCE_MESG_SENTENCE, + NMEA_SENTENCE_MESG_FIELDS + } NMEA_SENTENCE_MESG_FIELD_INDEX; + + typedef enum + { + AVIATION_ATTITUDE_MESG_TIMESTAMP, + AVIATION_ATTITUDE_MESG_TIMESTAMP_MS, + AVIATION_ATTITUDE_MESG_SYSTEM_TIME, + AVIATION_ATTITUDE_MESG_PITCH, + AVIATION_ATTITUDE_MESG_ROLL, + AVIATION_ATTITUDE_MESG_ACCEL_LATERAL, + AVIATION_ATTITUDE_MESG_ACCEL_NORMAL, + AVIATION_ATTITUDE_MESG_TURN_RATE, + AVIATION_ATTITUDE_MESG_STAGE, + AVIATION_ATTITUDE_MESG_ATTITUDE_STAGE_COMPLETE, + AVIATION_ATTITUDE_MESG_TRACK, + AVIATION_ATTITUDE_MESG_VALIDITY, + AVIATION_ATTITUDE_MESG_FIELDS + } AVIATION_ATTITUDE_MESG_FIELD_INDEX; + + typedef enum + { + VIDEO_MESG_URL, + VIDEO_MESG_HOSTING_PROVIDER, + VIDEO_MESG_DURATION, + VIDEO_MESG_FIELDS + } VIDEO_MESG_FIELD_INDEX; + + typedef enum + { + VIDEO_TITLE_MESG_MESSAGE_INDEX, + VIDEO_TITLE_MESG_MESSAGE_COUNT, + VIDEO_TITLE_MESG_TEXT, + VIDEO_TITLE_MESG_FIELDS + } VIDEO_TITLE_MESG_FIELD_INDEX; + + typedef enum + { + VIDEO_DESCRIPTION_MESG_MESSAGE_INDEX, + VIDEO_DESCRIPTION_MESG_MESSAGE_COUNT, + VIDEO_DESCRIPTION_MESG_TEXT, + VIDEO_DESCRIPTION_MESG_FIELDS + } VIDEO_DESCRIPTION_MESG_FIELD_INDEX; + + typedef enum + { + VIDEO_CLIP_MESG_CLIP_NUMBER, + VIDEO_CLIP_MESG_START_TIMESTAMP, + VIDEO_CLIP_MESG_START_TIMESTAMP_MS, + VIDEO_CLIP_MESG_END_TIMESTAMP, + VIDEO_CLIP_MESG_END_TIMESTAMP_MS, + VIDEO_CLIP_MESG_CLIP_START, + VIDEO_CLIP_MESG_CLIP_END, + VIDEO_CLIP_MESG_FIELDS + } VIDEO_CLIP_MESG_FIELD_INDEX; + + typedef enum + { + SET_MESG_TIMESTAMP, + SET_MESG_DURATION, + SET_MESG_REPETITIONS, + SET_MESG_WEIGHT, + SET_MESG_SET_TYPE, + SET_MESG_START_TIME, + SET_MESG_CATEGORY, + SET_MESG_CATEGORY_SUBTYPE, + SET_MESG_WEIGHT_DISPLAY_UNIT, + SET_MESG_MESSAGE_INDEX, + SET_MESG_WKT_STEP_INDEX, + SET_MESG_FIELDS + } SET_MESG_FIELD_INDEX; + + typedef enum + { + JUMP_MESG_TIMESTAMP, + JUMP_MESG_DISTANCE, + JUMP_MESG_HEIGHT, + JUMP_MESG_ROTATIONS, + JUMP_MESG_HANG_TIME, + JUMP_MESG_SCORE, + JUMP_MESG_POSITION_LAT, + JUMP_MESG_POSITION_LONG, + JUMP_MESG_SPEED, + JUMP_MESG_ENHANCED_SPEED, + JUMP_MESG_FIELDS + } JUMP_MESG_FIELD_INDEX; + + typedef enum + { + CLIMB_PRO_MESG_TIMESTAMP, + CLIMB_PRO_MESG_POSITION_LAT, + CLIMB_PRO_MESG_POSITION_LONG, + CLIMB_PRO_MESG_CLIMB_PRO_EVENT, + CLIMB_PRO_MESG_CLIMB_NUMBER, + CLIMB_PRO_MESG_CLIMB_CATEGORY, + CLIMB_PRO_MESG_CURRENT_DIST, + CLIMB_PRO_MESG_FIELDS + } CLIMB_PRO_MESG_FIELD_INDEX; + + typedef enum + { + FIELD_DESCRIPTION_MESG_DEVELOPER_DATA_INDEX, + FIELD_DESCRIPTION_MESG_FIELD_DEFINITION_NUMBER, + FIELD_DESCRIPTION_MESG_FIT_BASE_TYPE_ID, + FIELD_DESCRIPTION_MESG_FIELD_NAME, + FIELD_DESCRIPTION_MESG_ARRAY, + FIELD_DESCRIPTION_MESG_COMPONENTS, + FIELD_DESCRIPTION_MESG_SCALE, + FIELD_DESCRIPTION_MESG_OFFSET, + FIELD_DESCRIPTION_MESG_UNITS, + FIELD_DESCRIPTION_MESG_BITS, + FIELD_DESCRIPTION_MESG_ACCUMULATE, + FIELD_DESCRIPTION_MESG_FIT_BASE_UNIT_ID, + FIELD_DESCRIPTION_MESG_NATIVE_MESG_NUM, + FIELD_DESCRIPTION_MESG_NATIVE_FIELD_NUM, + FIELD_DESCRIPTION_MESG_FIELDS + } FIELD_DESCRIPTION_MESG_FIELD_INDEX; + + typedef enum + { + DEVELOPER_DATA_ID_MESG_DEVELOPER_ID, + DEVELOPER_DATA_ID_MESG_APPLICATION_ID, + DEVELOPER_DATA_ID_MESG_MANUFACTURER_ID, + DEVELOPER_DATA_ID_MESG_DEVELOPER_DATA_INDEX, + DEVELOPER_DATA_ID_MESG_APPLICATION_VERSION, + DEVELOPER_DATA_ID_MESG_FIELDS + } DEVELOPER_DATA_ID_MESG_FIELD_INDEX; + + typedef enum + { + COURSE_MESG_SPORT, + COURSE_MESG_NAME, + COURSE_MESG_CAPABILITIES, + COURSE_MESG_SUB_SPORT, + COURSE_MESG_FIELDS + } COURSE_MESG_FIELD_INDEX; + + typedef enum + { + COURSE_POINT_MESG_MESSAGE_INDEX, + COURSE_POINT_MESG_TIMESTAMP, + COURSE_POINT_MESG_POSITION_LAT, + COURSE_POINT_MESG_POSITION_LONG, + COURSE_POINT_MESG_DISTANCE, + COURSE_POINT_MESG_TYPE, + COURSE_POINT_MESG_NAME, + COURSE_POINT_MESG_FAVORITE, + COURSE_POINT_MESG_FIELDS + } COURSE_POINT_MESG_FIELD_INDEX; + + typedef enum + { + SEGMENT_ID_MESG_NAME, + SEGMENT_ID_MESG_UUID, + SEGMENT_ID_MESG_SPORT, + SEGMENT_ID_MESG_ENABLED, + SEGMENT_ID_MESG_USER_PROFILE_PRIMARY_KEY, + SEGMENT_ID_MESG_DEVICE_ID, + SEGMENT_ID_MESG_DEFAULT_RACE_LEADER, + SEGMENT_ID_MESG_DELETE_STATUS, + SEGMENT_ID_MESG_SELECTION_TYPE, + SEGMENT_ID_MESG_FIELDS + } SEGMENT_ID_MESG_FIELD_INDEX; + + typedef enum + { + SEGMENT_LEADERBOARD_ENTRY_MESG_MESSAGE_INDEX, + SEGMENT_LEADERBOARD_ENTRY_MESG_NAME, + SEGMENT_LEADERBOARD_ENTRY_MESG_TYPE, + SEGMENT_LEADERBOARD_ENTRY_MESG_GROUP_PRIMARY_KEY, + SEGMENT_LEADERBOARD_ENTRY_MESG_ACTIVITY_ID, + SEGMENT_LEADERBOARD_ENTRY_MESG_SEGMENT_TIME, + SEGMENT_LEADERBOARD_ENTRY_MESG_ACTIVITY_ID_STRING, + SEGMENT_LEADERBOARD_ENTRY_MESG_FIELDS + } SEGMENT_LEADERBOARD_ENTRY_MESG_FIELD_INDEX; + + typedef enum + { + SEGMENT_POINT_MESG_MESSAGE_INDEX, + SEGMENT_POINT_MESG_POSITION_LAT, + SEGMENT_POINT_MESG_POSITION_LONG, + SEGMENT_POINT_MESG_DISTANCE, + SEGMENT_POINT_MESG_ALTITUDE, + SEGMENT_POINT_MESG_LEADER_TIME, + SEGMENT_POINT_MESG_FIELDS + } SEGMENT_POINT_MESG_FIELD_INDEX; + + typedef enum + { + SEGMENT_LAP_MESG_MESSAGE_INDEX, + SEGMENT_LAP_MESG_TIMESTAMP, + SEGMENT_LAP_MESG_EVENT, + SEGMENT_LAP_MESG_EVENT_TYPE, + SEGMENT_LAP_MESG_START_TIME, + SEGMENT_LAP_MESG_START_POSITION_LAT, + SEGMENT_LAP_MESG_START_POSITION_LONG, + SEGMENT_LAP_MESG_END_POSITION_LAT, + SEGMENT_LAP_MESG_END_POSITION_LONG, + SEGMENT_LAP_MESG_TOTAL_ELAPSED_TIME, + SEGMENT_LAP_MESG_TOTAL_TIMER_TIME, + SEGMENT_LAP_MESG_TOTAL_DISTANCE, + SEGMENT_LAP_MESG_TOTAL_CYCLES, + SEGMENT_LAP_MESG_TOTAL_CALORIES, + SEGMENT_LAP_MESG_TOTAL_FAT_CALORIES, + SEGMENT_LAP_MESG_AVG_SPEED, + SEGMENT_LAP_MESG_MAX_SPEED, + SEGMENT_LAP_MESG_AVG_HEART_RATE, + SEGMENT_LAP_MESG_MAX_HEART_RATE, + SEGMENT_LAP_MESG_AVG_CADENCE, + SEGMENT_LAP_MESG_MAX_CADENCE, + SEGMENT_LAP_MESG_AVG_POWER, + SEGMENT_LAP_MESG_MAX_POWER, + SEGMENT_LAP_MESG_TOTAL_ASCENT, + SEGMENT_LAP_MESG_TOTAL_DESCENT, + SEGMENT_LAP_MESG_SPORT, + SEGMENT_LAP_MESG_EVENT_GROUP, + SEGMENT_LAP_MESG_NEC_LAT, + SEGMENT_LAP_MESG_NEC_LONG, + SEGMENT_LAP_MESG_SWC_LAT, + SEGMENT_LAP_MESG_SWC_LONG, + SEGMENT_LAP_MESG_NAME, + SEGMENT_LAP_MESG_NORMALIZED_POWER, + SEGMENT_LAP_MESG_LEFT_RIGHT_BALANCE, + SEGMENT_LAP_MESG_SUB_SPORT, + SEGMENT_LAP_MESG_TOTAL_WORK, + SEGMENT_LAP_MESG_AVG_ALTITUDE, + SEGMENT_LAP_MESG_MAX_ALTITUDE, + SEGMENT_LAP_MESG_GPS_ACCURACY, + SEGMENT_LAP_MESG_AVG_GRADE, + SEGMENT_LAP_MESG_AVG_POS_GRADE, + SEGMENT_LAP_MESG_AVG_NEG_GRADE, + SEGMENT_LAP_MESG_MAX_POS_GRADE, + SEGMENT_LAP_MESG_MAX_NEG_GRADE, + SEGMENT_LAP_MESG_AVG_TEMPERATURE, + SEGMENT_LAP_MESG_MAX_TEMPERATURE, + SEGMENT_LAP_MESG_TOTAL_MOVING_TIME, + SEGMENT_LAP_MESG_AVG_POS_VERTICAL_SPEED, + SEGMENT_LAP_MESG_AVG_NEG_VERTICAL_SPEED, + SEGMENT_LAP_MESG_MAX_POS_VERTICAL_SPEED, + SEGMENT_LAP_MESG_MAX_NEG_VERTICAL_SPEED, + SEGMENT_LAP_MESG_TIME_IN_HR_ZONE, + SEGMENT_LAP_MESG_TIME_IN_SPEED_ZONE, + SEGMENT_LAP_MESG_TIME_IN_CADENCE_ZONE, + SEGMENT_LAP_MESG_TIME_IN_POWER_ZONE, + SEGMENT_LAP_MESG_REPETITION_NUM, + SEGMENT_LAP_MESG_MIN_ALTITUDE, + SEGMENT_LAP_MESG_MIN_HEART_RATE, + SEGMENT_LAP_MESG_ACTIVE_TIME, + SEGMENT_LAP_MESG_WKT_STEP_INDEX, + SEGMENT_LAP_MESG_SPORT_EVENT, + SEGMENT_LAP_MESG_AVG_LEFT_TORQUE_EFFECTIVENESS, + SEGMENT_LAP_MESG_AVG_RIGHT_TORQUE_EFFECTIVENESS, + SEGMENT_LAP_MESG_AVG_LEFT_PEDAL_SMOOTHNESS, + SEGMENT_LAP_MESG_AVG_RIGHT_PEDAL_SMOOTHNESS, + SEGMENT_LAP_MESG_AVG_COMBINED_PEDAL_SMOOTHNESS, + SEGMENT_LAP_MESG_STATUS, + SEGMENT_LAP_MESG_UUID, + SEGMENT_LAP_MESG_AVG_FRACTIONAL_CADENCE, + SEGMENT_LAP_MESG_MAX_FRACTIONAL_CADENCE, + SEGMENT_LAP_MESG_TOTAL_FRACTIONAL_CYCLES, + SEGMENT_LAP_MESG_FRONT_GEAR_SHIFT_COUNT, + SEGMENT_LAP_MESG_REAR_GEAR_SHIFT_COUNT, + SEGMENT_LAP_MESG_TIME_STANDING, + SEGMENT_LAP_MESG_STAND_COUNT, + SEGMENT_LAP_MESG_AVG_LEFT_PCO, + SEGMENT_LAP_MESG_AVG_RIGHT_PCO, + SEGMENT_LAP_MESG_AVG_LEFT_POWER_PHASE, + SEGMENT_LAP_MESG_AVG_LEFT_POWER_PHASE_PEAK, + SEGMENT_LAP_MESG_AVG_RIGHT_POWER_PHASE, + SEGMENT_LAP_MESG_AVG_RIGHT_POWER_PHASE_PEAK, + SEGMENT_LAP_MESG_AVG_POWER_POSITION, + SEGMENT_LAP_MESG_MAX_POWER_POSITION, + SEGMENT_LAP_MESG_AVG_CADENCE_POSITION, + SEGMENT_LAP_MESG_MAX_CADENCE_POSITION, + SEGMENT_LAP_MESG_MANUFACTURER, + SEGMENT_LAP_MESG_TOTAL_GRIT, + SEGMENT_LAP_MESG_TOTAL_FLOW, + SEGMENT_LAP_MESG_AVG_GRIT, + SEGMENT_LAP_MESG_AVG_FLOW, + SEGMENT_LAP_MESG_TOTAL_FRACTIONAL_ASCENT, + SEGMENT_LAP_MESG_TOTAL_FRACTIONAL_DESCENT, + SEGMENT_LAP_MESG_FIELDS + } SEGMENT_LAP_MESG_FIELD_INDEX; + + typedef enum + { + SEGMENT_LAP_MESG_TOTAL_CYCLES_FIELD_TOTAL_STROKES, + SEGMENT_LAP_MESG_TOTAL_CYCLES_FIELD_SUBFIELDS, + SEGMENT_LAP_MESG_TOTAL_CYCLES_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + SEGMENT_LAP_MESG_TOTAL_CYCLES_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } SEGMENT_LAP_MESG_TOTAL_CYCLES_FIELD_SUBFIELD_INDEX; + + typedef enum + { + SEGMENT_FILE_MESG_MESSAGE_INDEX, + SEGMENT_FILE_MESG_FILE_UUID, + SEGMENT_FILE_MESG_ENABLED, + SEGMENT_FILE_MESG_USER_PROFILE_PRIMARY_KEY, + SEGMENT_FILE_MESG_LEADER_TYPE, + SEGMENT_FILE_MESG_LEADER_GROUP_PRIMARY_KEY, + SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID, + SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID_STRING, + SEGMENT_FILE_MESG_DEFAULT_RACE_LEADER, + SEGMENT_FILE_MESG_FIELDS + } SEGMENT_FILE_MESG_FIELD_INDEX; + + typedef enum + { + WORKOUT_MESG_SPORT, + WORKOUT_MESG_CAPABILITIES, + WORKOUT_MESG_NUM_VALID_STEPS, + WORKOUT_MESG_WKT_NAME, + WORKOUT_MESG_SUB_SPORT, + WORKOUT_MESG_POOL_LENGTH, + WORKOUT_MESG_POOL_LENGTH_UNIT, + WORKOUT_MESG_FIELDS + } WORKOUT_MESG_FIELD_INDEX; + + typedef enum + { + WORKOUT_SESSION_MESG_MESSAGE_INDEX, + WORKOUT_SESSION_MESG_SPORT, + WORKOUT_SESSION_MESG_SUB_SPORT, + WORKOUT_SESSION_MESG_NUM_VALID_STEPS, + WORKOUT_SESSION_MESG_FIRST_STEP_INDEX, + WORKOUT_SESSION_MESG_POOL_LENGTH, + WORKOUT_SESSION_MESG_POOL_LENGTH_UNIT, + WORKOUT_SESSION_MESG_FIELDS + } WORKOUT_SESSION_MESG_FIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_MESSAGE_INDEX, + WORKOUT_STEP_MESG_WKT_STEP_NAME, + WORKOUT_STEP_MESG_DURATION_TYPE, + WORKOUT_STEP_MESG_DURATION_VALUE, + WORKOUT_STEP_MESG_TARGET_TYPE, + WORKOUT_STEP_MESG_TARGET_VALUE, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH, + WORKOUT_STEP_MESG_INTENSITY, + WORKOUT_STEP_MESG_NOTES, + WORKOUT_STEP_MESG_EQUIPMENT, + WORKOUT_STEP_MESG_EXERCISE_CATEGORY, + WORKOUT_STEP_MESG_EXERCISE_NAME, + WORKOUT_STEP_MESG_EXERCISE_WEIGHT, + WORKOUT_STEP_MESG_WEIGHT_DISPLAY_UNIT, + WORKOUT_STEP_MESG_SECONDARY_TARGET_TYPE, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH, + WORKOUT_STEP_MESG_FIELDS + } WORKOUT_STEP_MESG_FIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_DURATION_TIME, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_DURATION_DISTANCE, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_DURATION_HR, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_DURATION_CALORIES, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_DURATION_STEP, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_DURATION_POWER, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_DURATION_REPS, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_SUBFIELDS, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WORKOUT_STEP_MESG_DURATION_VALUE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_TARGET_SPEED_ZONE, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_TARGET_HR_ZONE, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_TARGET_CADENCE_ZONE, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_TARGET_POWER_ZONE, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_REPEAT_STEPS, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_REPEAT_TIME, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_REPEAT_DISTANCE, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_REPEAT_CALORIES, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_REPEAT_HR, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_REPEAT_POWER, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_TARGET_STROKE_TYPE, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_SUBFIELDS, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WORKOUT_STEP_MESG_TARGET_VALUE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_CUSTOM_TARGET_SPEED_LOW, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_CUSTOM_TARGET_HEART_RATE_LOW, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_CUSTOM_TARGET_CADENCE_LOW, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_CUSTOM_TARGET_POWER_LOW, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_SUBFIELDS, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW_FIELD_SUBFIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_CUSTOM_TARGET_SPEED_HIGH, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_CUSTOM_TARGET_HEART_RATE_HIGH, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_CUSTOM_TARGET_CADENCE_HIGH, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_CUSTOM_TARGET_POWER_HIGH, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_SUBFIELDS, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH_FIELD_SUBFIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_SECONDARY_TARGET_SPEED_ZONE, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_SECONDARY_TARGET_HR_ZONE, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_SECONDARY_TARGET_CADENCE_ZONE, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_SECONDARY_TARGET_POWER_ZONE, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_SECONDARY_TARGET_STROKE_TYPE, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_SUBFIELDS, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WORKOUT_STEP_MESG_SECONDARY_TARGET_VALUE_FIELD_SUBFIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_SECONDARY_CUSTOM_TARGET_SPEED_LOW, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_SECONDARY_CUSTOM_TARGET_HEART_RATE_LOW, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_SECONDARY_CUSTOM_TARGET_CADENCE_LOW, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_SECONDARY_CUSTOM_TARGET_POWER_LOW, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_SUBFIELDS, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_LOW_FIELD_SUBFIELD_INDEX; + + typedef enum + { + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_SECONDARY_CUSTOM_TARGET_SPEED_HIGH, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_SECONDARY_CUSTOM_TARGET_HEART_RATE_HIGH, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_SECONDARY_CUSTOM_TARGET_CADENCE_HIGH, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_SECONDARY_CUSTOM_TARGET_POWER_HIGH, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_SUBFIELDS, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } WORKOUT_STEP_MESG_SECONDARY_CUSTOM_TARGET_VALUE_HIGH_FIELD_SUBFIELD_INDEX; + + typedef enum + { + EXERCISE_TITLE_MESG_MESSAGE_INDEX, + EXERCISE_TITLE_MESG_EXERCISE_CATEGORY, + EXERCISE_TITLE_MESG_EXERCISE_NAME, + EXERCISE_TITLE_MESG_WKT_STEP_NAME, + EXERCISE_TITLE_MESG_FIELDS + } EXERCISE_TITLE_MESG_FIELD_INDEX; + + typedef enum + { + SCHEDULE_MESG_MANUFACTURER, + SCHEDULE_MESG_PRODUCT, + SCHEDULE_MESG_SERIAL_NUMBER, + SCHEDULE_MESG_TIME_CREATED, + SCHEDULE_MESG_COMPLETED, + SCHEDULE_MESG_TYPE, + SCHEDULE_MESG_SCHEDULED_TIME, + SCHEDULE_MESG_FIELDS + } SCHEDULE_MESG_FIELD_INDEX; + + typedef enum + { + SCHEDULE_MESG_PRODUCT_FIELD_FAVERO_PRODUCT, + SCHEDULE_MESG_PRODUCT_FIELD_GARMIN_PRODUCT, + SCHEDULE_MESG_PRODUCT_FIELD_SUBFIELDS, + SCHEDULE_MESG_PRODUCT_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + SCHEDULE_MESG_PRODUCT_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } SCHEDULE_MESG_PRODUCT_FIELD_SUBFIELD_INDEX; + + typedef enum + { + TOTALS_MESG_MESSAGE_INDEX, + TOTALS_MESG_TIMESTAMP, + TOTALS_MESG_TIMER_TIME, + TOTALS_MESG_DISTANCE, + TOTALS_MESG_CALORIES, + TOTALS_MESG_SPORT, + TOTALS_MESG_ELAPSED_TIME, + TOTALS_MESG_SESSIONS, + TOTALS_MESG_ACTIVE_TIME, + TOTALS_MESG_SPORT_INDEX, + TOTALS_MESG_FIELDS + } TOTALS_MESG_FIELD_INDEX; + + typedef enum + { + WEIGHT_SCALE_MESG_TIMESTAMP, + WEIGHT_SCALE_MESG_WEIGHT, + WEIGHT_SCALE_MESG_PERCENT_FAT, + WEIGHT_SCALE_MESG_PERCENT_HYDRATION, + WEIGHT_SCALE_MESG_VISCERAL_FAT_MASS, + WEIGHT_SCALE_MESG_BONE_MASS, + WEIGHT_SCALE_MESG_MUSCLE_MASS, + WEIGHT_SCALE_MESG_BASAL_MET, + WEIGHT_SCALE_MESG_PHYSIQUE_RATING, + WEIGHT_SCALE_MESG_ACTIVE_MET, + WEIGHT_SCALE_MESG_METABOLIC_AGE, + WEIGHT_SCALE_MESG_VISCERAL_FAT_RATING, + WEIGHT_SCALE_MESG_USER_PROFILE_INDEX, + WEIGHT_SCALE_MESG_FIELDS + } WEIGHT_SCALE_MESG_FIELD_INDEX; + + typedef enum + { + BLOOD_PRESSURE_MESG_TIMESTAMP, + BLOOD_PRESSURE_MESG_SYSTOLIC_PRESSURE, + BLOOD_PRESSURE_MESG_DIASTOLIC_PRESSURE, + BLOOD_PRESSURE_MESG_MEAN_ARTERIAL_PRESSURE, + BLOOD_PRESSURE_MESG_MAP_3_SAMPLE_MEAN, + BLOOD_PRESSURE_MESG_MAP_MORNING_VALUES, + BLOOD_PRESSURE_MESG_MAP_EVENING_VALUES, + BLOOD_PRESSURE_MESG_HEART_RATE, + BLOOD_PRESSURE_MESG_HEART_RATE_TYPE, + BLOOD_PRESSURE_MESG_STATUS, + BLOOD_PRESSURE_MESG_USER_PROFILE_INDEX, + BLOOD_PRESSURE_MESG_FIELDS + } BLOOD_PRESSURE_MESG_FIELD_INDEX; + + typedef enum + { + MONITORING_INFO_MESG_TIMESTAMP, + MONITORING_INFO_MESG_LOCAL_TIMESTAMP, + MONITORING_INFO_MESG_ACTIVITY_TYPE, + MONITORING_INFO_MESG_CYCLES_TO_DISTANCE, + MONITORING_INFO_MESG_CYCLES_TO_CALORIES, + MONITORING_INFO_MESG_RESTING_METABOLIC_RATE, + MONITORING_INFO_MESG_FIELDS + } MONITORING_INFO_MESG_FIELD_INDEX; + + typedef enum + { + MONITORING_MESG_TIMESTAMP, + MONITORING_MESG_DEVICE_INDEX, + MONITORING_MESG_CALORIES, + MONITORING_MESG_DISTANCE, + MONITORING_MESG_CYCLES, + MONITORING_MESG_ACTIVE_TIME, + MONITORING_MESG_ACTIVITY_TYPE, + MONITORING_MESG_ACTIVITY_SUBTYPE, + MONITORING_MESG_ACTIVITY_LEVEL, + MONITORING_MESG_DISTANCE_16, + MONITORING_MESG_CYCLES_16, + MONITORING_MESG_ACTIVE_TIME_16, + MONITORING_MESG_LOCAL_TIMESTAMP, + MONITORING_MESG_TEMPERATURE, + MONITORING_MESG_TEMPERATURE_MIN, + MONITORING_MESG_TEMPERATURE_MAX, + MONITORING_MESG_ACTIVITY_TIME, + MONITORING_MESG_ACTIVE_CALORIES, + MONITORING_MESG_CURRENT_ACTIVITY_TYPE_INTENSITY, + MONITORING_MESG_TIMESTAMP_MIN_8, + MONITORING_MESG_TIMESTAMP_16, + MONITORING_MESG_HEART_RATE, + MONITORING_MESG_INTENSITY, + MONITORING_MESG_DURATION_MIN, + MONITORING_MESG_DURATION, + MONITORING_MESG_ASCENT, + MONITORING_MESG_DESCENT, + MONITORING_MESG_MODERATE_ACTIVITY_MINUTES, + MONITORING_MESG_VIGOROUS_ACTIVITY_MINUTES, + MONITORING_MESG_FIELDS + } MONITORING_MESG_FIELD_INDEX; + + typedef enum + { + MONITORING_MESG_CYCLES_FIELD_STEPS, + MONITORING_MESG_CYCLES_FIELD_STROKES, + MONITORING_MESG_CYCLES_FIELD_SUBFIELDS, + MONITORING_MESG_CYCLES_FIELD_ACTIVE_SUBFIELD = FIT_SUBFIELD_INDEX_ACTIVE_SUBFIELD, + MONITORING_MESG_CYCLES_FIELD_MAIN_FIELD = FIT_SUBFIELD_INDEX_MAIN_FIELD + } MONITORING_MESG_CYCLES_FIELD_SUBFIELD_INDEX; + + typedef enum + { + HR_MESG_TIMESTAMP, + HR_MESG_FRACTIONAL_TIMESTAMP, + HR_MESG_TIME256, + HR_MESG_FILTERED_BPM, + HR_MESG_EVENT_TIMESTAMP, + HR_MESG_EVENT_TIMESTAMP_12, + HR_MESG_FIELDS + } HR_MESG_FIELD_INDEX; + + typedef enum + { + STRESS_LEVEL_MESG_STRESS_LEVEL_VALUE, + STRESS_LEVEL_MESG_STRESS_LEVEL_TIME, + STRESS_LEVEL_MESG_FIELDS + } STRESS_LEVEL_MESG_FIELD_INDEX; + + typedef enum + { + MEMO_GLOB_MESG_PART_INDEX, + MEMO_GLOB_MESG_MEMO, + MEMO_GLOB_MESG_MESG_NUM, + MEMO_GLOB_MESG_PARENT_INDEX, + MEMO_GLOB_MESG_FIELD_NUM, + MEMO_GLOB_MESG_DATA, + MEMO_GLOB_MESG_FIELDS + } MEMO_GLOB_MESG_FIELD_INDEX; + + typedef enum + { + ANT_CHANNEL_ID_MESG_CHANNEL_NUMBER, + ANT_CHANNEL_ID_MESG_DEVICE_TYPE, + ANT_CHANNEL_ID_MESG_DEVICE_NUMBER, + ANT_CHANNEL_ID_MESG_TRANSMISSION_TYPE, + ANT_CHANNEL_ID_MESG_DEVICE_INDEX, + ANT_CHANNEL_ID_MESG_FIELDS + } ANT_CHANNEL_ID_MESG_FIELD_INDEX; + + typedef enum + { + ANT_RX_MESG_TIMESTAMP, + ANT_RX_MESG_FRACTIONAL_TIMESTAMP, + ANT_RX_MESG_MESG_ID, + ANT_RX_MESG_MESG_DATA, + ANT_RX_MESG_CHANNEL_NUMBER, + ANT_RX_MESG_DATA, + ANT_RX_MESG_FIELDS + } ANT_RX_MESG_FIELD_INDEX; + + typedef enum + { + ANT_TX_MESG_TIMESTAMP, + ANT_TX_MESG_FRACTIONAL_TIMESTAMP, + ANT_TX_MESG_MESG_ID, + ANT_TX_MESG_MESG_DATA, + ANT_TX_MESG_CHANNEL_NUMBER, + ANT_TX_MESG_DATA, + ANT_TX_MESG_FIELDS + } ANT_TX_MESG_FIELD_INDEX; + + typedef enum + { + EXD_SCREEN_CONFIGURATION_MESG_SCREEN_INDEX, + EXD_SCREEN_CONFIGURATION_MESG_FIELD_COUNT, + EXD_SCREEN_CONFIGURATION_MESG_LAYOUT, + EXD_SCREEN_CONFIGURATION_MESG_SCREEN_ENABLED, + EXD_SCREEN_CONFIGURATION_MESG_FIELDS + } EXD_SCREEN_CONFIGURATION_MESG_FIELD_INDEX; + + typedef enum + { + EXD_DATA_FIELD_CONFIGURATION_MESG_SCREEN_INDEX, + EXD_DATA_FIELD_CONFIGURATION_MESG_CONCEPT_FIELD, + EXD_DATA_FIELD_CONFIGURATION_MESG_FIELD_ID, + EXD_DATA_FIELD_CONFIGURATION_MESG_CONCEPT_COUNT, + EXD_DATA_FIELD_CONFIGURATION_MESG_DISPLAY_TYPE, + EXD_DATA_FIELD_CONFIGURATION_MESG_TITLE, + EXD_DATA_FIELD_CONFIGURATION_MESG_FIELDS + } EXD_DATA_FIELD_CONFIGURATION_MESG_FIELD_INDEX; + + typedef enum + { + EXD_DATA_CONCEPT_CONFIGURATION_MESG_SCREEN_INDEX, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_FIELD, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELD_ID, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_INDEX, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_DATA_PAGE, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_KEY, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_SCALING, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_DATA_UNITS, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_QUALIFIER, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_DESCRIPTOR, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_IS_SIGNED, + EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELDS + } EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELD_INDEX; + + typedef enum + { + DIVE_SUMMARY_MESG_TIMESTAMP, + DIVE_SUMMARY_MESG_REFERENCE_MESG, + DIVE_SUMMARY_MESG_REFERENCE_INDEX, + DIVE_SUMMARY_MESG_AVG_DEPTH, + DIVE_SUMMARY_MESG_MAX_DEPTH, + DIVE_SUMMARY_MESG_SURFACE_INTERVAL, + DIVE_SUMMARY_MESG_START_CNS, + DIVE_SUMMARY_MESG_END_CNS, + DIVE_SUMMARY_MESG_START_N2, + DIVE_SUMMARY_MESG_END_N2, + DIVE_SUMMARY_MESG_O2_TOXICITY, + DIVE_SUMMARY_MESG_DIVE_NUMBER, + DIVE_SUMMARY_MESG_BOTTOM_TIME, + DIVE_SUMMARY_MESG_AVG_ASCENT_RATE, + DIVE_SUMMARY_MESG_AVG_DESCENT_RATE, + DIVE_SUMMARY_MESG_MAX_ASCENT_RATE, + DIVE_SUMMARY_MESG_MAX_DESCENT_RATE, + DIVE_SUMMARY_MESG_HANG_TIME, + DIVE_SUMMARY_MESG_FIELDS + } DIVE_SUMMARY_MESG_FIELD_INDEX; + + typedef enum + { + HRV_MESG_TIME, + HRV_MESG_FIELDS + } HRV_MESG_FIELD_INDEX; + + typedef enum + { + PAD_MESG_FIELDS + } PAD_MESG_FIELD_INDEX; + + typedef struct + { + FIT_FLOAT64 scale; + FIT_FLOAT64 offset; + FIT_UINT8 num; + FIT_UINT8 bits; + FIT_BOOL accumulate; + } FIELD_COMPONENT; + + typedef struct + { + FIT_SINT32 refFieldValue; + FIT_UINT8 refFieldNum; + } SUBFIELD_MAP; + + typedef struct + { + const SUBFIELD_MAP* maps; + const FIELD_COMPONENT* components; + std::string name; + std::string units; + FIT_FLOAT64 scale; + FIT_FLOAT64 offset; + FIT_UINT8 numMaps; + FIT_UINT16 numComponents; + FIT_UINT8 type; + } SUBFIELD; + + typedef struct + { + const FIELD_COMPONENT* components; + const SUBFIELD* subFields; + std::string name; + std::string units; + FIT_FLOAT64 scale; + FIT_FLOAT64 offset; + FIT_UINT16 numComponents; + FIT_UINT16 numSubFields; + FIT_UINT8 num; + FIT_UINT8 type; + FIT_BOOL isAccumulated; + Type profileType; + } FIELD; + + typedef struct + { + const FIELD* fields; + std::string name; + FIT_UINT16 num; + FIT_UINT16 numFields; + } MESG; + + static const MESG mesgs[MESGS]; + + static const Profile::MESG* GetMesg(const FIT_UINT16 num); + static const Profile::MESG* GetMesg(const std::string& name); + static const FIT_UINT16 GetFieldIndex(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum); + static const FIT_UINT16 GetFieldIndex(const std::string& mesgName, const std::string& fieldName); + static const Profile::FIELD* GetField(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum); + static const Profile::FIELD* GetField(const std::string& mesgName, const std::string& fieldName); + static const FIT_UINT16 GetSubFieldIndex(const std::string& mesgName, const std::string& fieldName, const std::string& subFieldName); + static const Profile::SUBFIELD* GetSubField(const FIT_UINT16 mesgNum, const FIT_UINT8 fieldNum, const FIT_UINT16 subFieldIndex); + static const Profile::SUBFIELD* GetSubField(const std::string& mesgName, const std::string& fieldName, const std::string& subFieldName); +}; + +} // namespace fit + +#endif // !defined(FIT_PROFILE_HPP) diff --git a/Sources/cppfit/include/fit_protocol_validator.hpp b/Sources/cppfit/include/fit_protocol_validator.hpp new file mode 100644 index 0000000..b1daca0 --- /dev/null +++ b/Sources/cppfit/include/fit_protocol_validator.hpp @@ -0,0 +1,57 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(PROTOCOL_VALIDATOR_HPP) +#define PROTOCOL_VALIDATOR_HPP + +#include "fit.hpp" + +namespace fit +{ +class MesgDefinition; +class Mesg; + +class Validator +{ +public: + virtual ~Validator() {} + + virtual bool ValidateMesg( const Mesg& mesg ) = 0; + virtual bool ValidateMesgDefn( const MesgDefinition& defn ) = 0; +}; + +class ProtocolValidator + : public Validator +{ +public: + ProtocolValidator() = delete; + explicit ProtocolValidator( ProtocolVersion version ); + ~ProtocolValidator(); + + bool ValidateMesg( const Mesg& mesg ) override final; + bool ValidateMesgDefn( const MesgDefinition& defn ) override final; + +private: + Validator* validator; +}; + +class V1Validator + : public Validator +{ +public: + bool ValidateMesg( const Mesg& mesg ) override final; + bool ValidateMesgDefn( const MesgDefinition& defn ) override final; +}; + +} // namespace fit + +#endif // defined(PROTOCOL_VALIDATOR_HPP) diff --git a/Sources/cppfit/include/fit_runtime_exception.hpp b/Sources/cppfit/include/fit_runtime_exception.hpp new file mode 100644 index 0000000..badb09e --- /dev/null +++ b/Sources/cppfit/include/fit_runtime_exception.hpp @@ -0,0 +1,33 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_RUNTIME_EXCEPTION_HPP) +#define FIT_RUNTIME_EXCEPTION_HPP + +#include +#include + +namespace fit +{ + +class RuntimeException : public std::runtime_error +{ +public: + RuntimeException(const std::string& msg = "") + : runtime_error(msg) + { + } +}; + +} // namespace fit + +#endif // !defined(FIT_RUNTIME_EXCEPTION_HPP) diff --git a/Sources/cppfit/include/fit_unicode.hpp b/Sources/cppfit/include/fit_unicode.hpp new file mode 100644 index 0000000..99b7787 --- /dev/null +++ b/Sources/cppfit/include/fit_unicode.hpp @@ -0,0 +1,43 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// +// ****WARNING**** This file is auto-generated! Do NOT edit this file. +// Profile Version = 21.94Release +// Tag = production/akw/21.94.00-0-g0f668193 +///////////////////////////////////////////////////////////////////////////////////////////// + + +#if !defined(FIT_UNICODE_HPP) +#define FIT_UNICODE_HPP + +#include +#include +#include "fit.hpp" + +namespace fit +{ + +class Unicode +{ +public: + typedef std::string UTF8_STRING; // UTF-8 encoded strings used for file/message input and output. + typedef std::fstream UTF8_FSTREAM; + typedef std::ofstream UTF8_OFSTREAM; + typedef std::ifstream UTF8_IFSTREAM; + typedef std::stringstream UTF8_SSTREAM; + typedef std::ostringstream UTF8_OSSTREAM; + typedef std::istringstream UTF8_ISSTREAM; + +public: + static Unicode::UTF8_STRING Encode_BaseToUTF8(const FIT_WSTRING& strSrc); + static FIT_WSTRING Encode_UTF8ToBase(const Unicode::UTF8_STRING& strSrc); + static Unicode::UTF8_STRING Copy_StdToUTF8(const std::string& strSrc); + static std::string Copy_UTF8ToStd(const Unicode::UTF8_STRING& strSrc); +}; + +} // namespace fit + +#endif // !defined(FIT_UNICODE_HPP) diff --git a/Tests/FITTests/ActivityEncodeTests.swift b/Tests/FITTests/ActivityEncodeTests.swift new file mode 100644 index 0000000..26ab6d0 --- /dev/null +++ b/Tests/FITTests/ActivityEncodeTests.swift @@ -0,0 +1,418 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// + + +import XCTest +@testable import ObjcFIT + +final class ActivityEncodeTests: XCTestCase { + + func testTimeBasedActivity() { + let twoPI:Double = Double.pi * 2.0 + let semicirclesPerMeter:Double = 107.173 + let fileName = "SwiftActivityEncodeRecipe.fit" + + var messages:[FITMessage] = [] + + // The starting timestamp for the activity + let startTime = FITDate() + + // Timer Events are a BEST PRACTICE for FIT ACTIVITY files + let eventMesgStart = FITEventMesg() + eventMesgStart.setTimestamp(startTime) + eventMesgStart.setEvent(FITEventTimer) + eventMesgStart.setEventType(FITEventTypeStart) + messages.append(eventMesgStart) + + // Create the Developer Id message for the developer data fields. + let developerIdMesg = FITDeveloperDataIdMesg(); + // It is a BEST PRACTICE to reuse the same Guid for all FIT files created by your platform + // "00010203-0405-0607-0809-0A0B0C0D0E0F" + let appId: [UInt8] = [0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f] + for byte in appId { + developerIdMesg.setApplicationId(byte, for: byte) + } + + developerIdMesg.setDeveloperDataIndex(0); + developerIdMesg.setApplicationVersion(110); + messages.append(developerIdMesg); + + // Create the Developer Data Field Descriptions + let doughnutsFieldDescMesg = FITFieldDescriptionMesg(); + doughnutsFieldDescMesg.setDeveloperDataIndex(0); + doughnutsFieldDescMesg.setFieldDefinitionNumber(0); + doughnutsFieldDescMesg.setFitBaseTypeId(FITFitBaseTypeFloat32); + doughnutsFieldDescMesg.setFieldName("Doughnuts Earned", for:0); + doughnutsFieldDescMesg.setUnits("doughnuts", for:0); + doughnutsFieldDescMesg.setNativeMesgNum(FITMesgNumSession); + messages.append(doughnutsFieldDescMesg); + + let hrFieldDescMesg = FITFieldDescriptionMesg(); + hrFieldDescMesg.setDeveloperDataIndex(0); + hrFieldDescMesg.setFieldDefinitionNumber(1); + hrFieldDescMesg.setFitBaseTypeId(FITFitBaseTypeUint8); + hrFieldDescMesg.setFieldName("Heart Rate", for:0); + hrFieldDescMesg.setUnits("bpm", for:0); + hrFieldDescMesg.setNativeFieldNum(FITRecordMesgFieldDefNumHeartRate.rawValue); + hrFieldDescMesg.setNativeMesgNum(FITMesgNumRecord); + messages.append(hrFieldDescMesg); + + // Every FIT ACTIVITY file MUST contain Record messages + var timestamp = FITDate(fitDate: startTime) + + // Create one hour (3600 seconds) of Record data + for i in 0...3600 { + // Create a new Record message and set the timestamp + let recordMesg = FITRecordMesg(); + recordMesg.setTimestamp(timestamp); + + // Fake Record Data of Various Signal Patterns + recordMesg.setDistance(FITFloat32(i)); // Ramp + recordMesg.setSpeed(1); // Flatline + recordMesg.setHeartRate(FITUInt8((sin(twoPI * (0.01 * Double(i) + 10)) + 1.0) * 127.0)); // Sine + recordMesg.setCadence(FITUInt8(i % 255)); // Sawtooth + recordMesg.setPower(FITUInt16((i % 255) < 127 ? 150 : 250)); // Square + recordMesg.setAltitude(FITFloat32(abs(Float(i).truncatingRemainder(dividingBy: 255.0) - 127.0))); // Triangle + recordMesg.setPositionLat(0); + recordMesg.setPositionLong(FITSInt32(round(Double(i) * semicirclesPerMeter))); + + // Add a Developer Field to the Record Message + let hrDevField = FITDeveloperField(fieldDescriptionMesg: hrFieldDescMesg, andDeveloperDataIdMesg: developerIdMesg); + hrDevField.addValue(NSNumber(value: ((sin(twoPI * (0.01 * Double(i) + 10)) + 1.0) * 127.0)), for: 0); + recordMesg.add(hrDevField); + + messages.append(recordMesg); + + // Increment the timestamp by one second + timestamp = timestamp.addingTimeInterval(1); + } + + // Timer Events are a BEST PRACTICE for FIT ACTIVITY files + let eventMesgStop = FITEventMesg(); + eventMesgStop.setTimestamp(timestamp); + eventMesgStop.setEvent(FITEventTimer); + eventMesgStop.setEventType(FITEventTypeStopAll); + messages.append(eventMesgStop); + + // Every FIT ACTIVITY file MUST contain at least one Lap message + let lapMesg = FITLapMesg(); + lapMesg.setMessageIndex(0); + lapMesg.setTimestamp(timestamp); + lapMesg.setStartTime(startTime); + lapMesg.setTotalElapsedTime(FITFloat32(timestamp.timestamp - startTime.timestamp)); + lapMesg.setTotalTimerTime(FITFloat32(timestamp.timestamp - startTime.timestamp)); + messages.append(lapMesg); + + // Every FIT ACTIVITY file MUST contain at least one Session message + let sessionMesg = FITSessionMesg(); + sessionMesg.setMessageIndex(0); + sessionMesg.setTimestamp(timestamp); + sessionMesg.setStartTime(startTime); + sessionMesg.setTotalElapsedTime(FITFloat32(timestamp.timestamp - startTime.timestamp)); + sessionMesg.setTotalTimerTime(FITFloat32(timestamp.timestamp - startTime.timestamp)); + sessionMesg.setSport(FITSportStandUpPaddleboarding); + sessionMesg.setSubSport(FITSubSportGeneric); + sessionMesg.setFirstLapIndex(0); + sessionMesg.setNumLaps(1); + + // Add a Developer Field to the Session message + let doughnutsEarnedDevField = FITDeveloperField(fieldDescriptionMesg: doughnutsFieldDescMesg, andDeveloperDataIdMesg: developerIdMesg); + doughnutsEarnedDevField.addValue(NSNumber(value: sessionMesg.getTotalElapsedTime() / 1200.0), for: 0); + sessionMesg.add(doughnutsEarnedDevField); + messages.append(sessionMesg); + + // Every FIT ACTIVITY file MUST contain EXACTLY one Activity message + let activityMesg = FITActivityMesg(); + activityMesg.setTimestamp(timestamp); + activityMesg.setTotalTimerTime(sessionMesg.getTotalTimerTime()); + activityMesg.setNumSessions(1); + let timezoneOffset = TimeZone.current.secondsFromGMT(); + activityMesg.setLocalTimestamp(FITLocalDateTime(Int(timestamp.timestamp) + timezoneOffset)); + messages.append(activityMesg); + + createActivityFile(messages: messages, fileName: fileName, startTime: startTime); + } + + func testLapSwimActivity() { + // Example Swim Data representing a 500 yard pool swim using different strokes and drills. + let swimData:[[String:Any]] = [ + ["type": "Active","duration":20,"stroke":"Freestyle","strokes":30], + ["type": "Active","duration":25,"stroke":"Freestyle","strokes":20], + ["type": "Active","duration":30,"stroke":"Freestyle","strokes":10], + ["type": "Active","duration":35,"stroke":"Freestyle","strokes":20], + ["type": "Lap"], + ["type": "Idle","duration":60], + ["type": "Lap"], + ["type": "Active","duration":20,"stroke":"Backstroke","strokes":30], + ["type": "Active","duration":25,"stroke":"Backstroke","strokes":20], + ["type": "Active","duration":30,"stroke":"Backstroke","strokes":10], + ["type": "Active","duration":35,"stroke":"Backstroke","strokes":20], + ["type": "Lap"], + ["type": "Idle","duration":60], + ["type": "Lap"], + ["type": "Active","duration":20,"stroke":"Breaststroke","strokes":30], + ["type": "Active","duration":25,"stroke":"Breaststroke","strokes":20], + ["type": "Active","duration":30,"stroke":"Breaststroke","strokes":10], + ["type": "Active","duration":35,"stroke":"Breaststroke","strokes":20], + ["type": "Lap"], + ["type": "Idle","duration":60], + ["type": "Lap"], + ["type": "Active","duration":20,"stroke":"Butterfly","strokes":30], + ["type": "Active","duration":25,"stroke":"Butterfly","strokes":20], + ["type": "Active","duration":30,"stroke":"Butterfly","strokes":10], + ["type": "Active","duration":35,"stroke":"Butterfly","strokes":20], + ["type": "Lap"], + ["type": "Idle","duration":60], + ["type": "Lap"], + ["type": "Active","duration":40,"stroke":"Drill"], + ["type": "Active","duration":40,"stroke":"Drill"], + ["type": "Active","duration":40,"stroke":"Drill"], + ["type": "Active","duration":40,"stroke":"Drill"], + ["type": "Lap"] + ] + + let lengthTypes = [ + "Invalid":FITLengthTypeInvalid, + "Idle":FITLengthTypeIdle, + "Active":FITLengthTypeActive + ] + + let strokeTypes = [ + "Invalid":FITSwimStrokeInvalid, + "Freestyle":FITSwimStrokeFreestyle, + "Backstroke":FITSwimStrokeBackstroke, + "Breaststroke":FITSwimStrokeBreaststroke, + "Butterfly":FITSwimStrokeButterfly, + "Drill":FITSwimStrokeDrill, + "Mixed":FITSwimStrokeMixed, + "Im":FITSwimStrokeIm + ] + + let fileName = "SwiftActivityEncodeRecipeLapSwim.fit" + var messages:[FITMessage] = [] + + // The starting timestamp for the activity + let startTime = FITDate() + + // Timer Events are a BEST PRACTICE for FIT ACTIVITY files + let eventMesgStart = FITEventMesg() + eventMesgStart.setTimestamp(startTime) + eventMesgStart.setEvent(FITEventTimer) + eventMesgStart.setEventType(FITEventTypeStart) + messages.append(eventMesgStart) + + // + // Create a Length or Lap message for each item in the sample swim data. Calculate + // distance, duration, and stroke count for each lap and the overall session. + // + + // Session Accumulators + var sessionTotalElapsedTime:Float = 0; + var sessionDistance:Float = 0; + var sessionNumLengths:UInt16 = 0; + var sessionNumActiveLengths:UInt16 = 0; + var sessionTotalStrokes:UInt32 = 0; + + // Lap accumulators + var lapTotalElapsedTime:Float = 0; + var lapDistance:Float = 0; + var lapNumActiveLengths:UInt16 = 0; + var lapNumLengths:UInt16 = 0; + var lapFirstLengthIndex:UInt16 = 0; + var lapTotalStrokes:UInt32 = 0; + var lapStartTime = FITDate(fitDate: startTime); + + let poolLength:Float = 22.86; + let poolLengthUnit = FITDisplayMeasureStatute; + var timestamp = FITDate(fitDate: startTime); + var messageIndex:UInt16 = 0; + + for swimLength in swimData { + let type = swimLength["type"] as! String; + + if (type == "Lap") { + // Create a Lap message, set its fields, and write it to the file + let lapMesg = FITLapMesg(); + lapMesg.setTimestamp(timestamp); + lapMesg.setStartTime(lapStartTime); + lapMesg.setTotalElapsedTime(lapTotalElapsedTime); + lapMesg.setTotalTimerTime(lapTotalElapsedTime); + lapMesg.setTotalDistance(lapDistance); + lapMesg.setFirstLengthIndex(lapFirstLengthIndex); + lapMesg.setNumActiveLengths(lapNumActiveLengths); + lapMesg.setNumLengths(lapNumLengths); + lapMesg.setTotalStrokes(FITUInt32(lapTotalStrokes)); + lapMesg.setAvgStrokeDistance(lapDistance / Float(lapTotalStrokes)); + lapMesg.setSport(FITSportSwimming); + lapMesg.setSubSport(FITSubSportLapSwimming); + messages.append(lapMesg); + + // Reset the Lap accumulators + lapFirstLengthIndex = messageIndex; + lapNumActiveLengths = 0; + lapNumLengths = 0; + lapTotalElapsedTime = 0; + lapDistance = 0; + lapTotalStrokes = 0; + lapStartTime = FITDate(fitDate: timestamp); + } + else { + let duration = Float(swimLength["duration"] as! Int); + let lengthType = lengthTypes[type] ?? FITLengthTypeInvalid; + + // Create a Length message and its fields + let lengthMesg = FITLengthMesg(); + lengthMesg.setMessageIndex(messageIndex); + lengthMesg.setStartTime(timestamp); + lengthMesg.setTotalElapsedTime(duration) + lengthMesg.setTotalTimerTime(duration) + lengthMesg.setLengthType(lengthType); + + timestamp = timestamp.addingTimeInterval(TimeInterval(duration)); + lengthMesg.setTimestamp(timestamp); + + // Create the Record message that pairs with the Length Message + let recordMesg = FITRecordMesg(); + recordMesg.setTimestamp(timestamp); + recordMesg.setDistance(sessionDistance + poolLength); + + // Is this an Active Length? + if (lengthType == FITLengthTypeActive) { + // Get the Active data from the model + let stroke = swimLength.keys.contains("stroke") ? swimLength["stroke"] as! String : "Invalid"; + let strokes = swimLength.keys.contains("strokes") ? UInt32(swimLength["strokes"] as! Int) : 0; + let swimStroke = strokeTypes[stroke] ?? FITSwimStrokeInvalid; + + // Set the Active data on the Length Message + lengthMesg.setAvgSpeed(poolLength / duration); + lengthMesg.setSwimStroke(swimStroke); + + if (strokes > 0) + { + lengthMesg.setTotalStrokes(FITUInt16(strokes)); + lengthMesg.setAvgSwimmingCadence(FITUInt8((Float(strokes) * 60) / duration)); + } + + // Set the Active data on the Record Message + recordMesg.setSpeed(poolLength / duration); + if (strokes > 0) + { + recordMesg.setCadence(FITUInt8((Float(strokes) * 60) / duration)); + } + + // Increment the "Active" accumulators + sessionNumActiveLengths += 1; + lapNumActiveLengths += 1; + sessionDistance += poolLength; + lapDistance += poolLength; + sessionTotalStrokes += strokes; + lapTotalStrokes += strokes; + } + + // Write the messages to the file + messages.append(recordMesg); + messages.append(lengthMesg); + + // Increment the "Total" accumulators + sessionTotalElapsedTime += duration; + lapTotalElapsedTime += duration; + sessionNumLengths += 1; + lapNumLengths += 1; + messageIndex += 1; + } + } + + // Timer Events are a BEST PRACTICE for FIT ACTIVITY files + let eventMesgStop = FITEventMesg(); + eventMesgStop.setTimestamp(timestamp); + eventMesgStop.setEvent(FITEventTimer); + eventMesgStop.setEventType(FITEventTypeStopAll); + messages.append(eventMesgStop); + + // Every FIT ACTIVITY file MUST contain at least one Session message + let sessionMesg = FITSessionMesg(); + sessionMesg.setTimestamp(timestamp); + sessionMesg.setStartTime(startTime); + sessionMesg.setTotalElapsedTime(sessionTotalElapsedTime); + sessionMesg.setTotalTimerTime(sessionTotalElapsedTime); + sessionMesg.setTotalDistance(sessionDistance); + sessionMesg.setSport(FITSportSwimming); + sessionMesg.setSubSport(FITSubSportLapSwimming); + sessionMesg.setFirstLapIndex(0); + sessionMesg.setNumLaps(1); + sessionMesg.setPoolLength(poolLength); + sessionMesg.setPoolLengthUnit(poolLengthUnit); + sessionMesg.setNumLengths(sessionNumLengths); + sessionMesg.setNumActiveLengths(sessionNumActiveLengths); + sessionMesg.setTotalStrokes(sessionTotalStrokes); + sessionMesg.setAvgStrokeDistance(sessionDistance / Float(sessionTotalStrokes)); + messages.append(sessionMesg); + + // Every FIT ACTIVITY file MUST contain EXACTLY one Activity message + let activityMesg = FITActivityMesg(); + activityMesg.setTimestamp(timestamp); + activityMesg.setTotalTimerTime(sessionMesg.getTotalTimerTime()); + activityMesg.setNumSessions(1); + let timezoneOffset = TimeZone.current.secondsFromGMT(); + activityMesg.setLocalTimestamp(FITLocalDateTime(Int(timestamp.timestamp) + timezoneOffset)); + messages.append(activityMesg); + + createActivityFile(messages: messages, fileName: fileName, startTime: startTime); + } + + func createActivityFile(messages:[FITMessage], fileName:String, startTime:FITDate) { + let documentsPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask,true).first ?? "" + let filePath = documentsPathString + "/" + fileName + + // The combination of file type, manufacturer id, product id, and serial number should be unique. + // When available, a non-random serial number should be used. + let fileType = FITFileActivity; + let manufacturerId = FITManufacturerDevelopment; + let productId:UInt16 = 0; + let softwareVersion:Float32 = 1.0; + let serialNumber = UInt32.random(in: 1.. [XCTestCaseEntry] { + return [ + testCase(FITTests.allTests), + testCase(FITDateTests.allTests), + testCase(ActivityEncode.allTests), + testCase(DecodeWithBroadcasterTests.allTests), + testCase(SwiftDecoderTests.allTests), + ] +} +#endif diff --git a/Tests/LinuxMain.swift b/Tests/LinuxMain.swift new file mode 100644 index 0000000..6679088 --- /dev/null +++ b/Tests/LinuxMain.swift @@ -0,0 +1,22 @@ +///////////////////////////////////////////////////////////////////////////////////////////// +// Copyright 2022 Garmin International, Inc. +// Licensed under the Flexible and Interoperable Data Transfer (FIT) Protocol License; you +// may not use this file except in compliance with the Flexible and Interoperable Data +// Transfer (FIT) Protocol License. +///////////////////////////////////////////////////////////////////////////////////////////// + + +import XCTest + +import FITTests +import ActivityEncodeTests +import DecodeEasyMethodTests +import SwiftDecoderTests + +var tests = [XCTestCaseEntry]() +tests += FITTests.allTests() +tests += FITDateTests.allTests() +tests += ActivityEncode.allTests() +tests += DecodeEasyMethodTests.allTests() +tests += SwiftDecoderTests.allTests() +XCTMain(tests)