639 lines
19 KiB
C++
Raw Normal View History

2025-12-10 00:01:32 +08:00
// 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
}