Packages
fit_decoder
0.1.0
A high-performance Elixir library for decoding Garmin .fit files using a C++ NIF.
Current section
Files
Jump to
Current section
Files
c_src/fit_sdk/cpp/fit_protocol_validator.cpp
/////////////////////////////////////////////////////////////////////////////////////////////
// Copyright 2025 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.171.0Release
// Tag = production/release/21.171.0-0-g57fed75
/////////////////////////////////////////////////////////////////////////////////////////////
#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;
}