639 lines
19 KiB
C++
639 lines
19 KiB
C++
|
|
// CameraFeature.cpp
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @note<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD>ܡ<EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>This example shows users how to access camera features.
|
|||
|
|
* @note<EFBFBD><EFBFBD>The program demonstrates feature list retrieval function, access mode, data type, feature value getting function,
|
|||
|
|
* and feature value setting function. */
|
|||
|
|
|
|||
|
|
#include <Windows.h>
|
|||
|
|
#include <malloc.h>
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <stdlib.h>
|
|||
|
|
|
|||
|
|
#include "IKapC.h"
|
|||
|
|
#pragma comment(lib, "IKapC.lib")
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
* @param[in] errc<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Determine whether the function is called successfully.
|
|||
|
|
* @param[in] errc<EFBFBD><EFBFBD>Function return value. */
|
|||
|
|
#define CHECK(errc) \
|
|||
|
|
if (ITKSTATUS_OK != errc) \
|
|||
|
|
printErrorAndExit(errc)
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Camera device handle.
|
|||
|
|
ITKDEVICE g_hCamera;
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Users enter Enter to exit the program. */
|
|||
|
|
void pressEnterToExit(void);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param[in] errc<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Print error message and exit the program.
|
|||
|
|
* @param[in] errc<EFBFBD><EFBFBD>Function return value. */
|
|||
|
|
void printErrorAndExit(ITKSTATUS errc);
|
|||
|
|
|
|||
|
|
/* @brief<65><66>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Enumerate all camera device features. */
|
|||
|
|
void enumAllFeatures();
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[in] nValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Set Int64 type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[in] nValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void setFeatureInt64(const char* featureName, int64_t nValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD>ȡ64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[out] pValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Get Int64 type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[out] pValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void getFeatureInt64(const char* featureName, int64_t* pValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[in] fValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Set double type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[in] fValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void setFeatureDouble(const char* featureName, double fValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[out] pValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Get double type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[out] pValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void getFeatureDouble(const char* featureName, double* pValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[in] bValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Set boolean type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[in] bValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void setFeatureBool(const char* featureName, bool bValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[out] pValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Get boolean type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[out] pValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void getFeatureBool(const char* featureName, bool* pValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[in] strValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Set string type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[in] strValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void setFeatureStr(const char* featureName, const char* strValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[out] strValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
* @param[in,out] pValueLen<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Get string type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[out] strValue<EFBFBD><EFBFBD>Feature value.
|
|||
|
|
* @param[in,out] pValueLen<EFBFBD><EFBFBD>The length of feature value. */
|
|||
|
|
void getFeatureStr(const char* featureName, char* strValue, uint32_t* pValueLen);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[in] strValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Set enum type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[in] strValue<EFBFBD><EFBFBD>Feature value. */
|
|||
|
|
void setFeatureEnum(const char* featureName, const char* strValue);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD>ȡö<C8A1><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
* @param[out] strValue<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
* @param[in,out] pValueLen<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Get enum type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name.
|
|||
|
|
* @param[out] strValue<EFBFBD><EFBFBD>Feature value.
|
|||
|
|
* @param[in,out] pValueLen<EFBFBD><EFBFBD>The length of feature value. */
|
|||
|
|
void getFeatureEnum(const char* featureName, char* strValue, uint32_t* pValueLen);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>Set command type feature value.
|
|||
|
|
* @param[in] featureName<EFBFBD><EFBFBD>Feature name. */
|
|||
|
|
void setFeatureCommand(const char* featureName);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
* @param[in] hDev<EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>This function is registered as a callback function. When feature value is changed, the function will be called.
|
|||
|
|
* @param[in] hDev<EFBFBD><EFBFBD>Device handle. */
|
|||
|
|
void demonstrateFeatureValueChanged(ITKDEVICE hDev);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
* @param[in] context<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param[in] eventInfo<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>This function is registered as a callback function. When feature value is changed, the function will be called.
|
|||
|
|
* @param[in] context<EFBFBD><EFBFBD>Input parameter.
|
|||
|
|
* @param[in] eventInfo<EFBFBD><EFBFBD>Event information handle. */
|
|||
|
|
void __stdcall featureValueChangeCallback(void* context, ITKEVENTINFO eventInfo);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
* @param[in] hDev<EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>This function is registered as a callback function. When the connected device goes offline, the function will be
|
|||
|
|
* called.
|
|||
|
|
* @param[in] hDev<EFBFBD><EFBFBD>Device handle. */
|
|||
|
|
void demonstrateCameraRemove(ITKDEVICE hDev);
|
|||
|
|
|
|||
|
|
/* @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
* @param[in] context<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param[in] eventInfo<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* @brief<EFBFBD><EFBFBD>This function is registered as a callback function. When the connected device goes offline, the function will be
|
|||
|
|
* called.
|
|||
|
|
* @param[in] context<EFBFBD><EFBFBD>Input parameter.
|
|||
|
|
* @param[in] eventInfo<EFBFBD><EFBFBD>Event information handle. */
|
|||
|
|
void _stdcall removalCallbackFunction(void* context, ITKEVENTINFO eventInfo);
|
|||
|
|
|
|||
|
|
int main(void)
|
|||
|
|
{
|
|||
|
|
// IKapC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Return value of IKapC functions.
|
|||
|
|
ITKSTATUS res;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// The number of available devices.
|
|||
|
|
uint32_t numDevices = 0;
|
|||
|
|
|
|||
|
|
// <20><>Ҫ<EFBFBD><EFBFBD><F2BFAAB5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// The index of device to be opened.
|
|||
|
|
uint32_t devIndex = 0;
|
|||
|
|
|
|||
|
|
printf("Itek Console Camera Features Example(C version)\n");
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC> IKapC <20><><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Initialize IKapC runtime environment.
|
|||
|
|
res = ItkManInitialize();
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
// ö<>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>豸ǰ<E8B1B8><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItkManGetDeviceCount() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Enumerate the number of available devices. Before opening the device, ItkManGetDeviceCount() function must be called.
|
|||
|
|
res = ItkManGetDeviceCount(&numDevices);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
// <20><>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>豸ʱ<E8B1B8><CAB1>
|
|||
|
|
//
|
|||
|
|
// When there is no connected devices.
|
|||
|
|
if (numDevices == 0) {
|
|||
|
|
fprintf(stderr, "No device.\n");
|
|||
|
|
ItkManTerminate();
|
|||
|
|
pressEnterToExit();
|
|||
|
|
exit(EXIT_FAILURE);
|
|||
|
|
}
|
|||
|
|
fprintf(stderr, "total device count: %d, the index of which you want to open is:", numDevices);
|
|||
|
|
fflush(stderr);
|
|||
|
|
int scanTmp = scanf_s("%u", &devIndex);
|
|||
|
|
if (scanTmp != 1) {
|
|||
|
|
fprintf(stderr, "Invalid input. Expect an integer.\n");
|
|||
|
|
ItkManTerminate();
|
|||
|
|
pressEnterToExit();
|
|||
|
|
exit(EXIT_FAILURE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (devIndex >= numDevices)
|
|||
|
|
{
|
|||
|
|
fprintf(stderr, "index: %d is more than %d.\n", devIndex, numDevices - 1);
|
|||
|
|
ItkManTerminate();
|
|||
|
|
pressEnterToExit();
|
|||
|
|
exit(EXIT_FAILURE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ȡ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Open the device and get the handle of the device.
|
|||
|
|
res = ItkDevOpen(devIndex, ITKDEV_VAL_ACCESS_MODE_CONTROL, &g_hCamera);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
// ö<><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Enumerate all camera device features.
|
|||
|
|
enumAllFeatures();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// This function is registered as a callback function. When feature value is changed, the function will be called.
|
|||
|
|
demonstrateFeatureValueChanged(g_hCamera);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// This function is registered as a callback function. When the connected device goes offline, the function will be
|
|||
|
|
// called.
|
|||
|
|
demonstrateCameraRemove(g_hCamera);
|
|||
|
|
|
|||
|
|
getchar();
|
|||
|
|
getchar();
|
|||
|
|
|
|||
|
|
//<2F>ر<EFBFBD><D8B1>豸<EFBFBD><E8B1B8>
|
|||
|
|
//
|
|||
|
|
// Close the device.
|
|||
|
|
res = ItkDevClose(g_hCamera);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
// <20>ͷ<EFBFBD> IKapC <20><><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Release IKapC runtime environment.
|
|||
|
|
ItkManTerminate();
|
|||
|
|
|
|||
|
|
pressEnterToExit();
|
|||
|
|
return EXIT_SUCCESS;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Print error message and exit the program.
|
|||
|
|
void printErrorAndExit(ITKSTATUS errc)
|
|||
|
|
{
|
|||
|
|
fprintf(stderr, "Error Code:%08X\n", errc);
|
|||
|
|
ItkManTerminate();
|
|||
|
|
pressEnterToExit();
|
|||
|
|
exit(EXIT_FAILURE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Users enter Enter to exit the program.
|
|||
|
|
void pressEnterToExit(void)
|
|||
|
|
{
|
|||
|
|
fprintf(stderr, "\nPress enter to exit.\n");
|
|||
|
|
while (getchar() != '\n')
|
|||
|
|
;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ö<><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Enumerate all camera device features.
|
|||
|
|
void enumAllFeatures()
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
|
|||
|
|
// <20>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// The number of device features.
|
|||
|
|
uint32_t nFeatureCount = 0;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Feature name.
|
|||
|
|
char featureName[128];
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3>ȡ<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// The length of feature name.
|
|||
|
|
uint32_t featureNameLen = 128;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
|||
|
|
//
|
|||
|
|
// The info of feature.
|
|||
|
|
ITK_FEATURE_BASE_INFO info;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
|
|||
|
|
//
|
|||
|
|
// The type of feature.
|
|||
|
|
uint32_t featureAccessMode = ITKFEATURE_VAL_ACCESS_MODE_UNDEFINED;
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Get the number of device features.
|
|||
|
|
res = ItkDevGetFeatureCount(g_hCamera, &nFeatureCount);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
for (uint32_t i = 0; i < nFeatureCount; i++) {
|
|||
|
|
featureNameLen = 128;
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Get the name of feature.
|
|||
|
|
res = ItkDevGetFeatureName(g_hCamera, i, featureName, &featureNameLen);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
res = ItkDevGetAccessMode(g_hCamera, featureName, &featureAccessMode);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
char* strAccessMode = "ACCESS_MODE_UNDEFINED";
|
|||
|
|
switch (featureAccessMode) {
|
|||
|
|
case ITKFEATURE_VAL_ACCESS_MODE_RW:
|
|||
|
|
strAccessMode = "RW";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_ACCESS_MODE_RO:
|
|||
|
|
strAccessMode = "RO";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_ACCESS_MODE_WO:
|
|||
|
|
strAccessMode = "WO";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_ACCESS_MODE_NI:
|
|||
|
|
strAccessMode = "NI";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_ACCESS_MODE_NA:
|
|||
|
|
strAccessMode = "NA";
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Get the type of feature.
|
|||
|
|
res = ItkDevGetFeatureInfo(g_hCamera, featureName, &info);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
char* strType = "Unknown";
|
|||
|
|
switch (info.Type) {
|
|||
|
|
case ITKFEATURE_VAL_TYPE_INT32:
|
|||
|
|
strType = "INT32";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_INT64:
|
|||
|
|
strType = "INT64";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_FLOAT:
|
|||
|
|
strType = "FLOAT";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_DOUBLE:
|
|||
|
|
strType = "DOUBLE";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_BOOL:
|
|||
|
|
strType = "BOOL";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_ENUM:
|
|||
|
|
strType = "ENUM";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_STRING:
|
|||
|
|
strType = "STRING";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_COMMAND:
|
|||
|
|
strType = "COMMAND";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_CATEGORY:
|
|||
|
|
strType = "CATEGORY";
|
|||
|
|
break;
|
|||
|
|
case ITKFEATURE_VAL_TYPE_REGISTER:
|
|||
|
|
strType = "REGISTER";
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
printf("Feature Name : %s access mode : %s feature type : %s\n", featureName, strAccessMode, strType);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Set Int64 type feature value.
|
|||
|
|
void setFeatureInt64(const char* featureName, int64_t nValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevSetInt64(g_hCamera, featureName, nValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ64λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Get Int64 type feature value.
|
|||
|
|
void getFeatureInt64(const char* featureName, int64_t* pValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevGetInt64(g_hCamera, featureName, pValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Set double type feature value.
|
|||
|
|
void setFeatureDouble(const char* featureName, double fValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevSetDouble(g_hCamera, featureName, fValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Get double type feature value.
|
|||
|
|
void getFeatureDouble(const char* featureName, double* pValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevGetDouble(g_hCamera, featureName, pValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Set boolean type feature value.
|
|||
|
|
void setFeatureBool(const char* featureName, bool bValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevSetBool(g_hCamera, featureName, bValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Get boolean type feature value.
|
|||
|
|
void getFeatureBool(const char* featureName, bool* pValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevGetBool(g_hCamera, featureName, pValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Set string type feature value.
|
|||
|
|
void setFeatureStr(const char* featureName, const char* strValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevFromString(g_hCamera, featureName, strValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Get string type feature value.
|
|||
|
|
void getFeatureStr(const char* featureName, char* strValue, uint32_t* pValueLen)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevToString(g_hCamera, featureName, strValue, pValueLen);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Set enum type feature value.
|
|||
|
|
void setFeatureEnum(const char* featureName, const char* strValue)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevFromString(g_hCamera, featureName, strValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡö<C8A1><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Get enum type feature value.
|
|||
|
|
void getFeatureEnum(const char* featureName, char* strValue, uint32_t* pValueLen)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
|
|||
|
|
// ö<><C3B6><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
|||
|
|
//
|
|||
|
|
// Enumeration info.
|
|||
|
|
ITK_FEATURE_ENUM_ENTRY_INFO enumInfo;
|
|||
|
|
|
|||
|
|
// ö<><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// The number of enumeration.
|
|||
|
|
uint32_t featureValueCount = 0;
|
|||
|
|
|
|||
|
|
// <20><>ȡö<C8A1><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Get the number enumerations.
|
|||
|
|
ITK_FEATURE_BASE_INFO featureInfo = {};
|
|||
|
|
res = ItkDevGetFeatureInfo(g_hCamera, featureName, &featureInfo);
|
|||
|
|
CHECK(res);
|
|||
|
|
featureValueCount = featureInfo.EnumCount;
|
|||
|
|
|
|||
|
|
for (uint32_t i = 0; i < featureValueCount; i++) {
|
|||
|
|
// <20><>ȡö<C8A1><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
|||
|
|
//
|
|||
|
|
// Get the name enumeration.
|
|||
|
|
memset(&enumInfo, 0, sizeof(ITK_FEATURE_ENUM_ENTRY_INFO));
|
|||
|
|
res = ItkDevGetEnumEntryFeatureInfo(g_hCamera, featureName, (uint64_t)i, &enumInfo);
|
|||
|
|
CHECK(res);
|
|||
|
|
if (enumInfo.AccessMode == ITKFEATURE_VAL_ACCESS_MODE_RW ||
|
|||
|
|
enumInfo.AccessMode == ITKFEATURE_VAL_ACCESS_MODE_RO ||
|
|||
|
|
enumInfo.AccessMode == ITKFEATURE_VAL_ACCESS_MODE_WO)
|
|||
|
|
printf("Enum string %d value: %s - displayName: %s\n", i, enumInfo.ValueStr, enumInfo.DisplayName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Set enum type feature value.
|
|||
|
|
res = ItkDevFromString(g_hCamera, featureName, strValue);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
//
|
|||
|
|
// Set command type feature value.
|
|||
|
|
void setFeatureCommand(const char* featureName)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res = ITKSTATUS_OK;
|
|||
|
|
res = ItkDevExecuteCommand(g_hCamera, featureName);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// This function is registered as a callback function. When feature value is changed, the function will be called.
|
|||
|
|
void demonstrateFeatureValueChanged(ITKDEVICE hDev)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res;
|
|||
|
|
|
|||
|
|
// ע<><D7A2><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Register callback function.
|
|||
|
|
res = ItkDevRegisterCallback(hDev, "FeatureValueChanged", featureValueChangeCallback, hDev);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// This function is registered as a callback function. When the connected device goes offline, the function will be called.
|
|||
|
|
void demonstrateCameraRemove(ITKDEVICE hDev)
|
|||
|
|
{
|
|||
|
|
ITKSTATUS res;
|
|||
|
|
|
|||
|
|
// ע<><D7A2><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
// Register callback function.
|
|||
|
|
res = ItkDevRegisterCallback(hDev, "DeviceRemove", removalCallbackFunction, hDev);
|
|||
|
|
CHECK(res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// This function is registered as a callback function. When feature value is changed, the function will be called.
|
|||
|
|
void __stdcall featureValueChangeCallback(void* context, ITKEVENTINFO eventInfo)
|
|||
|
|
{
|
|||
|
|
ITKDEVICE hDev = (ITKDEVICE)context;
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>Ϣ<EFBFBD><CFA2>
|
|||
|
|
//
|
|||
|
|
// Get the event info.
|
|||
|
|
ITK_DEVEVENT_INFO devEventInfo;
|
|||
|
|
ITKSTATUS res = ItkEventGetInfo(eventInfo, &devEventInfo);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
// <20><>ӡ<EFBFBD><D3A1>Ϣ<EFBFBD><CFA2>
|
|||
|
|
//
|
|||
|
|
// Print information.
|
|||
|
|
#if __STDC_VERSION__ >= 199901L
|
|||
|
|
printf("%s, feature name: %s, time: %lld.\n", devEventInfo.eventName, devEventInfo.eventSource, devEventInfo.timestamp);
|
|||
|
|
#else
|
|||
|
|
printf("\n%s, feature name: %s, time: %I64d.\n", devEventInfo.eventName, devEventInfo.eventSource, devEventInfo.timestamp);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ϊһ<CEAA><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
//
|
|||
|
|
// This function is registered as a callback function. When the connected device goes offline, the function will be called.
|
|||
|
|
void _stdcall removalCallbackFunction(void* context, ITKEVENTINFO eventInfo)
|
|||
|
|
{
|
|||
|
|
ITKDEVICE hDev = (ITKDEVICE)context;
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>Ϣ<EFBFBD><CFA2>
|
|||
|
|
//
|
|||
|
|
// Get the event info.
|
|||
|
|
ITK_DEVEVENT_INFO devEventInfo;
|
|||
|
|
ITKSTATUS res = ItkEventGetInfo(eventInfo, &devEventInfo);
|
|||
|
|
CHECK(res);
|
|||
|
|
|
|||
|
|
// <20><>ӡ<EFBFBD><D3A1>Ϣ<EFBFBD><CFA2>
|
|||
|
|
//
|
|||
|
|
// Print information.
|
|||
|
|
#if __STDC_VERSION__ >= 199901L
|
|||
|
|
printf("%s, time: %lld.\n", devEventInfo.eventName, devEventInfo.timestamp);
|
|||
|
|
#else
|
|||
|
|
printf("\n%s, time: %I64d.\n", devEventInfo.eventName, devEventInfo.timestamp);
|
|||
|
|
#endif
|
|||
|
|
}
|