165 lines
6.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "GeneralGrabWithGrabber.h"
void SetSoftTriggerWithGrabber(pItkCamera pCam)
{
ITKSTATUS res = ITKSTATUS_OK;
int ret = IK_RTN_OK;
if (pCam->g_bSoftTriggerUsed) {
if (strcmp(pCam->g_devInfo.DeviceClass, "CoaXPress") == 0) {
res = ItkDevSetDouble(pCam->g_hCamera, "ExposureTime", 80);
res = ItkDevFromString(pCam->g_hCamera, "TriggerMode", "On");
res = ItkDevFromString(pCam->g_hCamera, "ExposureMode", "TriggerPulse");
ret = IKapSetInfo(pCam->g_hBoard, IKP_IMAGE_HEIGHT, 1000);
CHECK_IKAPBOARD(ret);
ret = IKapSetInfo(pCam->g_hBoard, IKP_CXP_TRIGGER_OUTPUT_SELECTOR, 1); // Integration Signal1
CHECK_IKAPBOARD(ret);
ret = IKapSetInfo(pCam->g_hBoard, IKP_INTEGRATION_TRIGGER_SOURCE, 9); // Software Trigger
CHECK_IKAPBOARD(ret);
ret = IKapSetInfo(pCam->g_hBoard, IKP_INTEGRATION_METHOD, 4); // Method5
CHECK_IKAPBOARD(ret);
ret = IKapSetInfo(pCam->g_hBoard, IKP_INTEGRATION_PARAM2, 5000);
CHECK_IKAPBOARD(ret);
ret = IKapSetInfo(pCam->g_hBoard, IKP_CXP_FRAME_BURST_COUNT, 1050);
CHECK_IKAPBOARD(ret);
ret = IKapSetInfo(pCam->g_hBoard, IKP_CXP_FRAME_BURST_PERIOD, 100000);
CHECK_IKAPBOARD(ret);
ret = IKapSetInfo(pCam->g_hBoard, IKP_SOFTWARE_TRIGGER_WIDTH, 5000);
CHECK_IKAPBOARD(ret);
} else if (strcmp(pCam->g_devInfo.DeviceClass, "CameraLink") == 0) {
res = ItkDevFromString(pCam->g_hCamera, "SynchronizationMode", "ExternalPulse");
res = ItkDevFromString(pCam->g_hCamera, "InputLineTriggerSource", "CC1"); // InputLineTriggerSource
res = ItkDevSetDouble(pCam->g_hCamera, "LinePeriodTime", 50);
ret = IKapSetInfo(pCam->g_hBoard, IKP_IMAGE_HEIGHT, 2000);
ret = IKapSetInfo(pCam->g_hBoard, IKP_CC1_SOURCE, 5); // Software Trigger
ret = IKapSetInfo(pCam->g_hBoard, IKP_SOFTWARE_TRIGGER_SYNC_MODE, 0); // Off
ret = IKapSetInfo(pCam->g_hBoard, IKP_SOFTWARE_TRIGGER_PERIOD, 80); // softTriggerPeriod
ret = IKapSetInfo(pCam->g_hBoard, IKP_SOFTWARE_TRIGGER_COUNT, 2050); // softTriggerCount
} else {
res = ItkDevFromString(pCam->g_hCamera, "TriggerSelector", "FrameStart");
res = ItkDevFromString(pCam->g_hCamera, "TriggerMode", "On");
res = ItkDevFromString(pCam->g_hCamera, "TriggerSource", "Software");
}
} else {
if (strcmp(pCam->g_devInfo.DeviceClass, "CoaXPress") == 0) {
res = ItkDevFromString(pCam->g_hCamera, "ExposureMode", "Timed");
} else if (strcmp(pCam->g_devInfo.DeviceClass, "CameraLink") == 0) {
res = ItkDevFromString(pCam->g_hCamera, "SynchronizationMode", "InternalFreeRun");
} else {
res = ItkDevFromString(pCam->g_hCamera, "TriggerSelector", "FrameStart");
res = ItkDevFromString(pCam->g_hCamera, "TriggerMode", "Off");
}
}
}
void ConfigureFrameGrabber(pItkCamera pCam)
{
ITKSTATUS res = ITKSTATUS_OK;
int ret = IK_RTN_OK;
char configFilename[MAX_PATH];
if (pCam->g_bLoadGrabberConfig) {
if (GetOption(configFilename) == false) {
printf("Fail to get configuration, using default setting!\n");
} else {
ret = IKapLoadConfigurationFromFile(pCam->g_hBoard, configFilename);
CHECK_IKAPBOARD(ret);
}
}
ret = IKapSetInfo(pCam->g_hBoard, IKP_FRAME_COUNT, pCam->g_bufferCount);
CHECK_IKAPBOARD(ret);
int timeout = -1;
ret = IKapSetInfo(pCam->g_hBoard, IKP_TIME_OUT, timeout);
CHECK_IKAPBOARD(ret);
int grab_mode = IKP_GRAB_NON_BLOCK;
ret = IKapSetInfo(pCam->g_hBoard, IKP_GRAB_MODE, grab_mode);
CHECK_IKAPBOARD(ret);
int transfer_mode = IKP_FRAME_TRANSFER_SYNCHRONOUS_NEXT_EMPTY_WITH_PROTECT;
ret = IKapSetInfo(pCam->g_hBoard, IKP_FRAME_TRANSFER_MODE, transfer_mode);
CHECK_IKAPBOARD(ret);
/***************************/
/// \~chinese չʾ<D5B9><CABE><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ<EFBFBD><D6B7>ΪBuffer<65><72><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ<EFBFBD><D6B7>ע<EFBFBD>ⲻҪ<E2B2BB><D2AA><EFBFBD><EFBFBD><EFBFBD>ͷŸ<CDB7><C5B8>ڴ<EFBFBD> \~english Show how to using the memory address as the memory address of Buffer,be careful not to forget to release the memory
/// \~chinese <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Buffer<65><72>ַ<EFBFBD><D6B7><EFBFBD>ڴ<EFBFBD> \~english Create the memory that the user requests for setting the Buffer address
/*int64_t nFrameSize = 0;
ret = IKapGetInfo64(pCam->g_hBoard, IKP_FRAME_SIZE, &nFrameSize);
CHECK_IKAPBOARD(ret);
pCam->g_user_buffer = (char*)malloc(nFrameSize);
if (pCam->g_user_buffer == NULL)
{
pressEnterToExit();
exit(EXIT_FAILURE);
}*/
// \~chinese <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>Buffer<65><72><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ<EFBFBD><D6B7>Ϊ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD>ʵ<EFBFBD><CAB5>ڴ<EFBFBD><DAB4><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1~g_bufferCount-1<><31>Bufferͬ<72><CDAC><EFBFBD><EFBFBD> \~english The memory address of Buffer with index number 0 is changed to the appropriate size memory address applied by the user, just as with Buffer with index number 1~g_bufferCount-1.
/*ret = IKapSetBufferAddress(pCam->g_hBoard, 0, pCam->g_user_buffer);
CHECK_IKAPBOARD(ret);*/
/***************************/
}
void StartGrabImage(pItkCamera pCam)
{
ITKSTATUS res = ITKSTATUS_OK;
int ret = IK_RTN_OK;
if (strcmp(pCam->g_devInfo.DeviceClass, "CameraLink") != 0) {
res = ItkDevExecuteCommand(pCam->g_hCamera, "AcquisitionStop");
CHECK_IKAPC(res);
}
ret = IKapStartGrab(pCam->g_hBoard, 0);
CHECK_IKAPBOARD(ret);
if (strcmp(pCam->g_devInfo.DeviceClass, "CameraLink") != 0) {
res = ItkDevExecuteCommand(pCam->g_hCamera, "AcquisitionStart");
CHECK_IKAPC(res);
}
}
/// \~chinese ѡ<><D1A1><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> \~english Select configuration file
bool GetOption(char* lpConfigFileName)
{
OPENFILENAME iniofn;
wchar_t gcMsgBuf[MAX_PATH] = _T("\0");
wchar_t lpTempFileName[_MAX_PATH] = _T("\0");
GetModuleFileName(NULL, gcMsgBuf, MAX_PATH);
PathRemoveFileSpec(gcMsgBuf);
iniofn.lStructSize = sizeof(OPENFILENAME);
iniofn.hwndOwner = NULL;
iniofn.lpstrFilter = _T("Configuration File(*.vlcf)\0*.vlcf\0");
iniofn.lpstrCustomFilter = NULL;
iniofn.nFilterIndex = 1;
iniofn.lpstrFile = lpTempFileName;
iniofn.nMaxFile = MAX_PATH;
iniofn.lpstrFileTitle = NULL;
iniofn.nMaxFileTitle = MAX_PATH;
iniofn.lpstrInitialDir = gcMsgBuf;
iniofn.lpstrTitle = _T("The 'Configuration File' of the purpose read is chosen.");
iniofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
iniofn.lpstrDefExt = _T("vlcf");
if (GetOpenFileName(&iniofn) == FALSE)
return false;
WideCharToMultiByte(
CP_OEMCP, 0, lpTempFileName, (int)_tcsclen(lpTempFileName) + 1, lpConfigFileName, _MAX_PATH, NULL, NULL);
return true;
}