165 lines
6.9 KiB
C++
165 lines
6.9 KiB
C++
#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;
|
||
} |