Program Listing for File VmbCTypeDefinitions.h

Return to documentation for file (include/VmbC/VmbCTypeDefinitions.h)

/*=============================================================================
  Copyright (C) 2012 - 2021 Allied Vision Technologies.  All Rights Reserved.

  Redistribution of this header file, in original or modified form, without
  prior written consent of Allied Vision Technologies is prohibited.

-------------------------------------------------------------------------------

  File:        VmbCTypeDefinitions.h

-------------------------------------------------------------------------------

  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
  NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
  DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

=============================================================================*/

#ifndef VMBC_TYPE_DEFINITIONS_H_INCLUDE_
#define VMBC_TYPE_DEFINITIONS_H_INCLUDE_

#include <stddef.h>
#include <stdint.h>

#include <VmbC/VmbCommonTypes.h>

#if defined (_WIN32)
#if defined AVT_VMBAPI_C_EXPORTS                // DLL exports
#define IMEXPORTC                               // We export via the .def file
#elif defined AVT_VMBAPI_C_LIB                  // static LIB
#define IMEXPORTC
#else                                           // import
#define IMEXPORTC __declspec(dllimport)
#endif

#ifndef _WIN64
 // Calling convention
#define VMB_CALL __stdcall
#else
 // Calling convention
#define VMB_CALL
#endif
#elif defined (__GNUC__) && (__GNUC__ >= 4) && defined (__ELF__)
 // SO exports (requires compiler option -fvisibility=hidden)
#ifdef AVT_VMBAPI_C_EXPORTS
#define IMEXPORTC __attribute__((visibility("default")))
#else
#define IMEXPORTC
#endif

#ifdef __i386__
    // Calling convention
#define VMB_CALL __attribute__((stdcall))
#else
    // Calling convention
#define VMB_CALL
#endif
#elif defined (__APPLE__)
#define IMEXPORTC __attribute__((visibility("default")))
 // Calling convention
#define VMB_CALL
#else
#error Unknown platform, file needs adaption
#endif

#ifdef __cplusplus
extern "C" {
#endif

typedef enum VmbTransportLayerType
{
    VmbTransportLayerTypeUnknown        = 0,
    VmbTransportLayerTypeGEV            = 1,
    VmbTransportLayerTypeCL             = 2,
    VmbTransportLayerTypeIIDC           = 3,
    VmbTransportLayerTypeUVC            = 4,
    VmbTransportLayerTypeCXP            = 5,
    VmbTransportLayerTypeCLHS           = 6,
    VmbTransportLayerTypeU3V            = 7,
    VmbTransportLayerTypeEthernet       = 8,
    VmbTransportLayerTypePCI            = 9,
    VmbTransportLayerTypeCustom         = 10,
    VmbTransportLayerTypeMixed          = 11,
} VmbTransportLayerType;

typedef VmbUint32_t VmbTransportLayerType_t;

typedef struct VmbTransportLayerInfo
{
    const char*                 transportLayerIdString;
    const char*                 transportLayerName;
    const char*                 transportLayerModelName;
    const char*                 transportLayerVendor;
    const char*                 transportLayerVersion;
    const char*                 transportLayerPath;
    VmbHandle_t                 transportLayerHandle;
    VmbTransportLayerType_t     transportLayerType;

} VmbTransportLayerInfo_t;

typedef struct VmbInterfaceInfo
{
    const char*                 interfaceIdString;
    const char*                 interfaceName;
    VmbHandle_t                 interfaceHandle;
    VmbHandle_t                 transportLayerHandle;
    VmbTransportLayerType_t     interfaceType;

} VmbInterfaceInfo_t;

typedef enum VmbAccessModeType
{
    VmbAccessModeNone       = 0,
    VmbAccessModeFull       = 1,
    VmbAccessModeRead       = 2,
    VmbAccessModeUnknown    = 4,
    VmbAccessModeExclusive  = 8,
} VmbAccessModeType;

typedef VmbUint32_t VmbAccessMode_t;

typedef struct VmbCameraInfo
{
    const char*         cameraIdString;
    const char*         cameraIdExtended;
    const char*         cameraName;
    const char*         modelName;
    const char*         serialString;
    VmbHandle_t         transportLayerHandle;
    VmbHandle_t         interfaceHandle;
    VmbHandle_t         localDeviceHandle;
    VmbHandle_t const*  streamHandles;
    VmbUint32_t         streamCount;
    VmbAccessMode_t     permittedAccess;

} VmbCameraInfo_t;

typedef enum VmbFeatureDataType
{
    VmbFeatureDataUnknown       = 0,
    VmbFeatureDataInt           = 1,
    VmbFeatureDataFloat         = 2,
    VmbFeatureDataEnum          = 3,
    VmbFeatureDataString        = 4,
    VmbFeatureDataBool          = 5,
    VmbFeatureDataCommand       = 6,
    VmbFeatureDataRaw           = 7,
    VmbFeatureDataNone          = 8,
} VmbFeatureDataType;

typedef VmbUint32_t VmbFeatureData_t;

typedef enum VmbFeatureVisibilityType
{
    VmbFeatureVisibilityUnknown         = 0,
    VmbFeatureVisibilityBeginner        = 1,
    VmbFeatureVisibilityExpert          = 2,
    VmbFeatureVisibilityGuru            = 3,
    VmbFeatureVisibilityInvisible       = 4,
} VmbFeatureVisibilityType;

typedef VmbUint32_t VmbFeatureVisibility_t;

typedef enum VmbFeatureFlagsType
{
    VmbFeatureFlagsNone             = 0,
    VmbFeatureFlagsRead             = 1,
    VmbFeatureFlagsWrite            = 2,
    VmbFeatureFlagsVolatile         = 8,
    VmbFeatureFlagsModifyWrite      = 16,
} VmbFeatureFlagsType;

typedef VmbUint32_t VmbFeatureFlags_t;

typedef struct VmbFeatureInfo
{
    const char*                 name;
    const char*                 category;
    const char*                 displayName;
    const char*                 tooltip;
    const char*                 description;
    const char*                 sfncNamespace;
    const char*                 unit;
    const char*                 representation;
    VmbFeatureData_t            featureDataType;
    VmbFeatureFlags_t           featureFlags;
    VmbUint32_t                 pollingTime;
    VmbFeatureVisibility_t      visibility;
    VmbBool_t                   isStreamable;
    VmbBool_t                   hasSelectedFeatures;

} VmbFeatureInfo_t;

typedef struct VmbFeatureEnumEntry
{
    const char*                 name;
    const char*                 displayName;
    const char*                 tooltip;
    const char*                 description;
    VmbInt64_t                  intValue;
    const char*                 sfncNamespace;
    VmbFeatureVisibility_t      visibility;

} VmbFeatureEnumEntry_t;

typedef enum VmbFrameStatusType
{
    VmbFrameStatusComplete          =  0,
    VmbFrameStatusIncomplete        = -1,
    VmbFrameStatusTooSmall          = -2,
    VmbFrameStatusInvalid           = -3,
} VmbFrameStatusType;

typedef VmbInt32_t VmbFrameStatus_t;

typedef enum VmbFrameFlagsType
{
    VmbFrameFlagsNone                   = 0,
    VmbFrameFlagsDimension              = 1,
    VmbFrameFlagsOffset                 = 2,
    VmbFrameFlagsFrameID                = 4,
    VmbFrameFlagsTimestamp              = 8,
    VmbFrameFlagsImageData              = 16,
    VmbFrameFlagsPayloadType            = 32,
    VmbFrameFlagsChunkDataPresent       = 64,
} VmbFrameFlagsType;

typedef VmbUint32_t VmbFrameFlags_t;

typedef enum VmbPayloadType
{
    VmbPayloadTypeUnknown               = 0,
    VmbPayloadTypeImage                 = 1,
    VmbPayloadTypeRaw                   = 2,
    VmbPayloadTypeFile                  = 3,
    VmbPayloadTypeJPEG                  = 5,
    VmbPayloadTypJPEG2000               = 6,
    VmbPayloadTypeH264                  = 7,
    VmbPayloadTypeChunkOnly             = 8,
    VmbPayloadTypeDeviceSpecific        = 9,
    VmbPayloadTypeGenDC                 = 11,
} VmbPayloadType;

typedef VmbUint32_t VmbPayloadType_t;

typedef VmbUint32_t VmbImageDimension_t;

typedef struct VmbFrame
{
    void*                   buffer;
    VmbUint32_t             bufferSize;
    void*                   context[4];

    VmbFrameStatus_t        receiveStatus;
    VmbUint64_t             frameID;
    VmbUint64_t             timestamp;
    VmbUint8_t*             imageData;
    VmbFrameFlags_t         receiveFlags;
    VmbPixelFormat_t        pixelFormat;
    VmbImageDimension_t     width;
    VmbImageDimension_t     height;
    VmbImageDimension_t     offsetX;
    VmbImageDimension_t     offsetY;
    VmbPayloadType_t        payloadType;
    VmbBool_t               chunkDataPresent;

} VmbFrame_t;

typedef enum VmbFeaturePersistType
{
    VmbFeaturePersistAll            = 0,
    VmbFeaturePersistStreamable     = 1,
    VmbFeaturePersistNoLUT          = 2
} VmbFeaturePersistType;

typedef VmbUint32_t VmbFeaturePersist_t;

typedef enum VmbModulePersistFlagsType
{
    VmbModulePersistFlagsNone           = 0x00,
    VmbModulePersistFlagsTransportLayer = 0x01,
    VmbModulePersistFlagsInterface      = 0x02,
    VmbModulePersistFlagsRemoteDevice   = 0x04,
    VmbModulePersistFlagsLocalDevice    = 0x08,
    VmbModulePersistFlagsStreams        = 0x10,
    VmbModulePersistFlagsAll            = 0xff
} VmbModulePersistFlagsType;

typedef VmbUint32_t VmbModulePersistFlags_t;

typedef enum VmbLogLevel
{
    VmbLogLevelNone = 0,
    VmbLogLevelError,
    VmbLogLevelDebug,
    VmbLogLevelWarn,
    VmbLogLevelTrace,
    VmbLogLevelAll = VmbLogLevelTrace,
} VmbLogLevel;

typedef VmbUint32_t VmbLogLevel_t;

typedef struct VmbFeaturePersistSettings
{
    VmbFeaturePersist_t     persistType;
    VmbModulePersistFlags_t modulePersistFlags;
    VmbUint32_t             maxIterations;
    VmbLogLevel_t           loggingLevel;

} VmbFeaturePersistSettings_t;

typedef void (VMB_CALL* VmbInvalidationCallback)(const VmbHandle_t handle, const char* name, void* userContext);

typedef void (VMB_CALL* VmbFrameCallback)(const VmbHandle_t cameraHandle, const VmbHandle_t streamHandle, VmbFrame_t* frame);

typedef VmbError_t(VMB_CALL* VmbChunkAccessCallback)(VmbHandle_t featureAccessHandle, void* userContext);

#ifdef __cplusplus
}
#endif

#endif // VMBC_TYPE_DEFINITIONS_H_INCLUDE_