Skip to content

pylon/SfncVersion.h#

Contains the support for SFNC version handling.

Namespaces#

Name
Pylon
Contains definitions of pylon types.

Defines#

Name
GCC_DIAGNOSTIC_AWARE

Macros Documentation#

define GCC_DIAGNOSTIC_AWARE#

#define GCC_DIAGNOSTIC_AWARE 0

Source code#

//-----------------------------------------------------------------------------
//  Basler pylon SDK
//  Copyright (c) 2009-2022 Basler AG
//  http://www.baslerweb.com
//  Author: Andreas Gau
//-----------------------------------------------------------------------------
#ifndef INCLUDED_SFNCVERSION_H_3193628
#define INCLUDED_SFNCVERSION_H_3193628

#include <pylon/Platform.h>
#include <pylon/PylonVersionInfo.h>

#ifdef PYLON_LINUX_BUILD
#   undef GCC_VERSION
#   define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#   undef GCC_DIAGNOSTIC_AWARE
#   define GCC_DIAGNOSTIC_AWARE          (GCC_VERSION >= 40200)
#   undef GCC_DIAGNOSTIC_PUSH_POP_AWARE
#   define GCC_DIAGNOSTIC_PUSH_POP_AWARE (GCC_VERSION >= 40600)
#else
#   undef GCC_DIAGNOSTIC_AWARE
#   define GCC_DIAGNOSTIC_AWARE 0
#endif

#if defined (PYLON_OSX_BUILD)
#   pragma clang diagnostic push
#   pragma clang diagnostic ignored "-Wunused-variable"
#   pragma clang diagnostic ignored "-Wunknown-pragmas"
#endif

#if GCC_DIAGNOSTIC_AWARE
#   if GCC_DIAGNOSTIC_PUSH_POP_AWARE
#       pragma GCC diagnostic push
#   endif
#   pragma GCC diagnostic ignored "-Wunknown-pragmas"
#   pragma GCC diagnostic ignored "-Wpragmas"   // gcc < 4.6 doesn't know the following pragma
#   pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#endif

#include <GenApi/GenApi.h>

#if GCC_DIAGNOSTIC_AWARE
#   if GCC_DIAGNOSTIC_PUSH_POP_AWARE
#       pragma GCC diagnostic pop
#   else
#       pragma GCC diagnostic warning "-Wunknown-pragmas"
#       pragma GCC diagnostic warning "-Wunused-but-set-variable"
#       pragma GCC diagnostic warning "-Wpragmas"   // gcc < 4.6 doesn't know the pragma
#   endif
#endif

#include <GenApi/Pointer.h>
#include <GenApi/INodeMap.h>

#if defined (PYLON_OSX_BUILD)
#   pragma clang diagnostic pop
#endif

namespace Pylon
{
    static const VersionInfo Sfnc_VersionUndefined( 0, 0, 0 );
    static const VersionInfo Sfnc_1_2_1( 1, 2, 1 );
    static const VersionInfo Sfnc_1_3_0( 1, 3, 0 );
    static const VersionInfo Sfnc_1_4_0( 1, 4, 0 );
    static const VersionInfo Sfnc_1_5_0( 1, 5, 0 );
    static const VersionInfo Sfnc_1_5_1( 1, 5, 1 );
    static const VersionInfo Sfnc_2_0_0( 2, 0, 0 );
    static const VersionInfo Sfnc_2_1_0( 2, 1, 0 );
    static const VersionInfo Sfnc_2_2_0( 2, 2, 0 );
    static const VersionInfo Sfnc_2_3_0( 2, 3, 0 );
    static const VersionInfo Sfnc_2_4_0( 2, 4, 0 );
    static const VersionInfo Sfnc_2_5_0( 2, 5, 0 );


    inline VersionInfo GetSfncVersion( GenApi::INodeMap* pNodeMap )
    {
        // If pNodeMap is a valid node map.
        if (pNodeMap)
        {
            // Check to see whether node for major version exists.
            GenApi::CIntegerPtr major = pNodeMap->GetNode( "DeviceSFNCVersionMajor" );
            if (major)
            {
                // Get further version Info.
                GenApi::CIntegerPtr minor = pNodeMap->GetNode( "DeviceSFNCVersionMinor" );
                GenApi::CIntegerPtr subminor = pNodeMap->GetNode( "DeviceSFNCVersionSubMinor" );

                if (!IsReadable( major ) || !IsReadable( minor ) || !IsReadable( subminor ))
                {
                    throw RUNTIME_EXCEPTION( "Failed to read SFNC version from camera device node map." );
                }

                VersionInfo v( static_cast<unsigned int>(major->GetValue()),
                               static_cast<unsigned int>(minor->GetValue()),
                               static_cast<unsigned int>(subminor->GetValue()) );
                return v;
            }
        }

        return Sfnc_VersionUndefined;
    }
}

#endif /* INCLUDED_SFNCVERSION_H_3193628 */

Updated on 5 July 2022 at 15:30:01