This example demonstrates how to prepare, execute, and clean up the camera in regards to using both software and hardware triggers. Retrieving and setting node values using QuickSpin is the only portion of the example that differs from Trigger_C.
A much wider range of topics is covered in the full Spinnaker examples than in the QuickSpin ones. There are only enough QuickSpin examples to demonstrate node access and to get started with the API; please see full Spinnaker examples for further or specific knowledge on a topic.
#include "stdio.h"
#include "string.h"
#define MAX_BUFF_LEN 256
{
} triggerType;
{
{
printf("Unable to retrieve node readability (%s node), with error %d...\n\n", nodeName, err);
}
return pbReadable;
}
{
printf("\n\n*** TRIGGER CONFIGURATION ***\n\n");
printf("Note that if the application / user software triggers faster than frame time, the trigger may be dropped / "
"skipped by the camera.\n");
printf("If several frames are needed per trigger, a more reliable alternative for such case, is to use the "
"multi-frame mode.\n\n");
{
printf("Software trigger chosen...\n\n");
}
{
printf("Hardware trigger chosen...\n\n");
}
{
printf("Unable to disable trigger mode. Aborting with error %d...\n\n", err);
return err;
}
printf("Trigger mode disabled...\n");
{
printf("Unable to choose trigger selector. Aborting with error %d...\n\n", err);
return err;
}
printf("Trigger selector set to frame start...\n");
{
{
printf("Unable to choose trigger source. Aborting with error %d...\n\n", err);
return err;
}
printf("Trigger source set to software...\n");
}
{
{
printf("Unable to choose trigger source. Aborting with error %d...\n\n", err);
return err;
}
printf("Trigger source set to line 0...\n");
}
{
printf("Unable to enable trigger mode. Aborting with error %d...\n\n", err);
return err;
}
printf("Trigger mode enabled...\n\n");
return err;
}
{
{
printf("Press the Enter key to initiate software trigger...\n");
getchar();
{
printf("Unable to execute software trigger. Aborting with error %d...\n\n", err);
return err;
}
}
{
printf("Use the hardware to trigger image acquisition.\n");
}
return err;
}
{
{
printf("Unable to disable trigger mode. Aborting with error %d...\n\n", err);
return err;
}
printf("Trigger mode disabled...\n\n");
return err;
}
{
unsigned int i = 0;
printf("\n*** DEVICE INFORMATION ***\n\n");
{
printf("Unable to retrieve nodemap. Non-fatal error %d...\n\n", err);
return err;
}
{
printf("Unable to retrieve node. Non-fatal error %d...\n\n", err);
return err;
}
size_t numFeatures = 0;
{
printf("Unable to retrieve number of nodes. Non-fatal error %d...\n\n", err);
return err;
}
for (i = 0; i < numFeatures; i++)
{
{
printf("Unable to retrieve node. Non-fatal error %d...\n\n", err);
continue;
}
{
strcpy(featureName, "Unknown name");
}
{
{
printf("Unable to retrieve node type. Non-fatal error %d...\n\n", err);
continue;
}
}
else
{
printf("%s: Node not readable\n", featureName);
continue;
}
{
strcpy(featureValue, "Unknown value");
}
printf("%s: %s\n", featureName, featureValue);
}
printf("\n");
return err;
}
{
printf("\n*** IMAGE ACQUISITION ***\n\n");
{
printf("Unable to set acquisition mode to continuous. Aborting with error %d...\n\n", err);
return err;
}
printf("Acquisition mode set to continuous...\n");
{
printf("Unable to begin image acquisition. Aborting with error %d...\n\n", err);
return err;
}
printf("Acquiring images...\n");
err =
spinStringGetValue(qsD.DeviceSerialNumber, deviceSerialNumber, &lenDeviceSerialNumber);
{
strcpy(deviceSerialNumber, "");
lenDeviceSerialNumber = 0;
}
else
{
printf("Device serial number retrieved as %s...\n", deviceSerialNumber);
}
printf("\n");
const unsigned int k_numImages = 10;
unsigned int imageCnt = 0;
{
printf("Unable to create image processor. Non-fatal error %d...\n\n", err);
}
{
printf("Unable to set image processor color processing method. Non-fatal error %d...\n\n", err);
}
for (imageCnt = 0; imageCnt < k_numImages; imageCnt++)
{
{
return err;
}
{
printf("Unable to retrieve next image. Aborting with error %d...\n\n", err);
}
{
printf("Unable to determine image completion. Non-fatal error %d...\n\n", err);
}
if (isIncomplete)
{
{
printf("Unable to retrieve image status. Non-fatal error %d...\n\n", err);
}
else
{
printf("Image incomplete with image status %d...\n", imageStatus);
}
}
if (hasFailed)
{
{
printf("Unable to release image. Non-fatal error %d...\n\n", err);
}
continue;
}
size_t width = 0;
size_t height = 0;
{
printf("Unable to retrieve image width. Non-fatal error %d...\n", err);
}
{
printf("Unable to retrieve image height. Non-fatal error %d...\n", err);
}
printf("Grabbed image %u, width = %u, height = %u\n", imageCnt, (unsigned int)width, (unsigned int)height);
{
printf("Unable to create image. Non-fatal error %d...\n\n", err);
}
{
printf("Unable to convert image. Non-fatal error %d...\n\n", err);
}
if (lenDeviceSerialNumber == 0)
{
sprintf(filename, "Trigger-C-%d.jpg", imageCnt);
}
else
{
sprintf(filename, "Trigger-C-%s-%d.jpg", deviceSerialNumber, imageCnt);
}
{
printf("Unable to save image. Non-fatal error %d...\n", err);
}
else
{
printf("Image saved at %s\n\n", filename);
}
{
printf("Unable to destroy image. Non-fatal error %d...\n\n", err);
}
{
printf("Unable to release image. Non-fatal error %d...\n\n", err);
}
}
{
printf("Unable to destroy image processor. Non-fatal error %d...\n\n", err);
}
{
printf("Unable to end acquisition. Non-fatal error %d...\n\n", err);
}
return err;
}
{
{
printf("Unable to initialize camera. Aborting with error %d...\n\n", err);
return err;
}
quickSpinTLDevice qsD;
{
printf("Unable to pre-fetch TL device nodes. Aborting with error %d...\n\n", err);
return err;
}
quickSpin qs;
{
printf("Unable to pre-fetch GenICam nodes. Aborting with error %d...\n\n", err);
return err;
}
{
return err;
}
{
return err;
}
{
return err;
}
{
printf("Unable to deinitialize camera. Non-fatal error %d...\n\n", err);
}
return err;
}
{
unsigned int i = 0;
printf("Application build date: %s %s \n\n", __DATE__, __TIME__);
{
printf("Unable to retrieve system instance. Aborting with error %d...\n\n", err);
return err;
}
spinLibraryVersion hLibraryVersion;
printf(
"Spinnaker library version: %d.%d.%d.%d\n\n",
hLibraryVersion.major,
hLibraryVersion.minor,
hLibraryVersion.type,
hLibraryVersion.build);
{
printf("Unable to create camera list. Aborting with error %d...\n\n", err);
return err;
}
{
printf("Unable to retrieve camera list. Aborting with error %d...\n\n", err);
return err;
}
size_t numCameras = 0;
{
printf("Unable to retrieve number of cameras. Aborting with error %d...\n\n", err);
return err;
}
printf("Number of cameras detected: %u\n\n", (unsigned int)numCameras);
if (numCameras == 0)
{
{
printf("Unable to clear camera list. Aborting with error %d...\n\n", err);
return err;
}
{
printf("Unable to destroy camera list. Aborting with error %d...\n\n", err);
return err;
}
{
printf("Unable to release system instance. Aborting with error %d...\n\n", err);
return err;
}
printf("Not enough cameras!\n");
printf("Done! Press Enter to exit...\n");
getchar();
return -1;
}
for (i = 0; i < numCameras; i++)
{
printf("\nRunning example for camera %d...\n", i);
{
printf("Unable to retrieve camera from list. Aborting with error %d...\n\n", err);
errReturn = err;
}
else
{
{
errReturn = err;
}
}
{
errReturn = err;
}
printf("Camera %d example complete...\n\n", i);
}
{
printf("Unable to clear camera list. Aborting with error %d...\n\n", err);
return err;
}
{
printf("Unable to destroy camera list. Aborting with error %d...\n\n", err);
return err;
}
{
printf("Unable to release system instance. Aborting with error %d...\n\n", err);
return err;
}
printf("\nDone! Press Enter to exit...\n");
getchar();
return errReturn;
}