typedefintXCHANDLE;///< Handle type used to identify an initialised session to a camera.
typedefunsignedlongErrCode;///< Type to hold an error code (see #ErrorCodes)
typedefunsignedlongFilterID;///< Filter ID handle type used to identify a filter registered to the filter stack of a #XCamera-object.
#if defined(__LP64__) // Handle systems with 8-byte "long" types (such as Linux 64bit) without altering the .dll/.so signature on pre-existing systems.
typedefunsignedintdword;///< 4 bytes (32-bits)
#else
typedefunsignedlongdword;///< 4 bytes (32-bits)
#endif
typedefunsignedshortword;///< 2 bytes (16-bits)
typedefunsignedcharbyte;///< 1 byte (8-bits)
typedefunsignedcharboole;///< 1 byte (8-bits)
typedefvoid*voidp;///< void pointer type
///
/// @brief Image filter messages
///
typedefenum
{
XMsgInit=0,/**< [API->Filter Event] Called when the filter is being installed ( (!) calling thread context) */
XMsgClose=1,/**< [API->Filter Event] Called when the filter is being removed ( (!) calling thread context) */
XMsgFrame=2,/**< [API->Filter Event] Called after every frame grab ( (!) grabbing thread context) */
XMsgGetName=3,/**< [App->Filter Event] Retrieve filter name: the filter should copy a friendly string to msgparm */
XMsgGetValue=4,/**< [Obsolete] */
XMsgSave=5,/**< [Obsolete] */
XMsgGetStatus=6,/**< [API->Filter Event] Retrieves a general purpose status message from the image filter */
XMsgUpdateViewPort=7,/**< [API->Filter Event] Instructs an image correction filter to update it's view port
This message is sent to a filter upon changing the window of interest, or when
flipping image horizontally or vertically */
XMsgCanProceed=8,/**< Used by image filters in in interactive mode to indicate acceptable image conditions */
XMsgGetInfo=9,/**< [Internal] Used to query filter 'registers' */
XMsgSelect=10,/**< [Obsolete] */
XMsgProcessedFrame=11,/**< [API->Filter Event] Sent after other filters have done their processing. Do not modify the frame data
in response to this event. */
XMsgTimeout=13,/**< [API->Filter Event] A camera time-out event was generated */
XMsgIsBusy=16,/**< [Thermography] Is the temperature filter recalculating - Used to check if the thermal filter is
still updating it's linearisation tables */
XMsgSetTROI=17,/**< [Imaging/Thermo] Set the adu/temperature span in percent, (see #XMsgSetTROIParms) */
XMsgLoad=18,/**< [Obsolete] */
XMsgUnload=19,/**< [Obsolete] */
XMsgADUToTemp=12,/**< [Thermography] Convert an ADU value to a temperature (see #XFltADUToTemperature) */
XMsgGetEN=14,/**< [Obsolete] Get temperature correction parameters (see #XMsgGetRadiometricParms) */
XMsgSetEN=15,/**< [Obsolete] Set temperature correction parameters (see #XMsgGetRadiometricParms) */
XMsgTempToADU=20,/**< [Thermography] Convert a temperature to an ADU value (see #XFltTemperatureToADU) */
XMsgGetTValue=21,/**< [Thermography] Retrieve an emissivity corrected value from a coordinate */
XMsgGetRadiometricParms=22,/**< [Thermography] Get temperature correction parameters (see #XMsgTempParms) */
XMsgSetRadiometricParms=23,/**< [Thermography] Set temperature correction parameters (see #XMsgTempParms) */
XMsgSerialise=100,/**< [App->Filter event] Serialise internal parameter state (write xml structure) see #XFltSetParameter */
XMsgDeserialise=101,/**< [App->Filter event] Deserialise parameter state (read xml structure) see #XFltSetParameter */
XMsgGetPriority=102,/**< [Filter Management] Write the current filter priority to the long * provided in v_pMsgParm */
XMsgSetFilterState=104,/**< [Filter Management] Enable or disable an image filter temporarily by sending 0/1 in v_pMsgParm */
XMsgIsSerialiseDirty=105,/**< [Internal] */
XMsgStoreHandle=106,/**< [Internal] Start tracking the module handle for plugin image filters */
XMsgUpdateTint=107,/**< [API->Filter event] Integration time change notification */
XMsgLinADUToTemp=109,/**< [Thermography] Convert a Linearized ADU value to a temperature (see #XFltADUToTemperatureLin) */
XMsgLinTempToADU=110,/**< [Thermography] Convert a temperature to a Linearized ADU value (see #XFltTemperatureToADULin) */
/// @brief Status messages used in conjunction with the #XStatus-callback.
///
typedefenum{
XSLoadLogic=1,/**< Passed when loading the camera's main logic file */
XSLoadVideoLogic=2,/**< Passed when loading the camera's video output firmware */
XSDataStorage=3,/**< Passed when accessing persistent data on the camera */
XSCorrection=4,/**< Passed when uploading correction data to the camera */
XSSelfStart=5,/**< Passed when a self starting camera is starting (instead of XSLoadLogic) */
XSMessage=6,/**< String event
** This status message is used to relay critical errors, and events originating
** from within the API.
** Cam|PropLimit|property=number - A filter notifies you your user interface should limit the value of 'property' to 'number'
** Cam|TemperatureFilter|RangeUpdate - The thermography filter uses this to notify you of a span update.
** Cam|TemperatureFilter|Off - The thermography filter suggests the application to dequeue the filter.
** Cam|InterfaceUpdate - Internal, do not handle, returning E_BUG here causes the API to stop unpacking 'abcd.package'.packages to %appdata%/xenics/interface
**
**
**/
XSLoadGrabber=7,/**< Passed when loading the framegrabber */
XSDeviceInformation=8/**< Device information passed when connecting a device, ulP is the lower part of the address. When using 64-bit the higher part of the address is stored in ulT */
}XStatusMessage;
///
/// @brief Status callback prototype.
///
/// This function is called by the SDK to report camera and interface events,
/// indicate progress while saving or loading blobs and general messages.
/// When a status function is declared the user is able to register this callback by
/// passing a pointer to the function as the pCallBack-argument when instantiating
/// a new XCamera-object (XC_OpenCamera() or XCamera::Create()).
///
/// @code
/// #include "XCamera.h"
/// #include <stdio.h>
///
/// ErrCode XStatusCallback(void *v_pUserParm, int iMsg, unsigned long ulP, unsigned long ulT) {
/// @brief The XCamera::GetFrame(FrameType, unsigned long, void *, unsigned int)-flags
///
/// These flags are used to control the way the GetFrame-method works.
///
typedefenum
{
XGF_Blocking=1,///< In blocking-mode the method does not return immediately with the return codes #E_NO_FRAME / #I_OK.
/// Instead the method waits for a frame and only returns until a frame was captured, or a time-out period has elapsed.
XGF_NoConversion=2,///< Prevents internal conversion to 8 bit, specifying this flag reduces computation time, but prevents #SaveData() and the #Blit() method from working.
XGF_FetchPFF=4,///< Retrieve the per frame footer with frame timing information. Call XCamera::GetFrameFooterLength() to determine the increase in frame size.
XGF_RFU_1=8,
XGF_RFU_2=16,
XGF_RFU_3=32
}XGetFrameFlags;
///
/// @brief XCamera::SaveData()-flags
///
typedefenum
{
XSD_Force16=1,///< Forces 16-bit output independent of the current #ColourMode-setting (only possible for PNG's)
XSD_Force8=2,///< Forces 8-bit output independent of the current #ColourMode
XSD_AlignLeft=4,///< Left aligns 16-bit output (#XSD_Force16 | #XSD_AlignLeft)
XSD_SaveThermalInfo=8,///< Save thermal conversion structure (only available when saving 16-bit PNGs)
XSD_RFU_0=16,///< Reserved
XSD_RFU_1=32,
XSD_RFU_2=64,
XSD_RFU_3=128
}XSaveDataFlags;
///
/// @brief XCamera::SaveSettings()-flags
///
typedefenum
{
XSS_SaveCameraProps=1,///< Define property sources to save settings from.
XSS_SaveGrabberProps=2,///<
XSS_SaveAllProps=4,///< Also save properties marked 'No persist'.
XSS_SS_RFU_3=8///<
}XSaveSettingsFlags;
///
/// @brief XCamera::LoadSettings()-flags
///
typedefenum
{
XSS_IgnoreNAIS=1,///< Ignore properties which do not affect the image.
XSS_LS_RFU_1=2,///<
XSS_LS_RFU_2=4,///<
XSS_LS_RFU_3=8///<
}XLoadSettingsFlags;
///
/// @brief XCamera::LoadCalibration()-flags
///
typedefenum
{
XLC_StartSoftwareCorrection=1,///< Starts the software correction filter after unpacking the calibration data
XLC_RFU_1=2,
XLC_RFU_2=4,
XLC_RFU_3=8
}XLoadCalibrationFlags;
///
/// @brief Xeneth property types
///
/// These types and their attributes are used by the property system.
/// To retrieve the property type call the XCamera::GetPropertyType-method using the short name to identify the property.
///
typedefenum
{
XType_None=0x00000000,
XType_Base_Mask=0x000000ff,///< Type mask
XType_Attr_Mask=0xffffff00,///< Attribute mask
XType_Base_Number=0x00000001,///< A number (floating)
XType_Base_Enum=0x00000002,///< An enumerated type (a choice)
/// Use XCamera::GetFrameFooterLength() to determine the exact size in bytes of both soft and hardware footers.
/// For more detailed information about footers refer to the XFooters.h-header. To learn how to retrieve
/// the per frame footer make sure to check XCamera::GetFrame(FrameType, unsigned long, void *, unsigned int) and the #XGF_FetchPFF-flag.
///
typedefstruct
{
unsignedshortlen;///< Structure length.
unsignedshortver;///< Fixed to 0xAA00.
longlongsoc;///< Time of Start Capture (us since start of epoch).
longlongtft;///< Time of reception (us since start of epoch).
dwordtfc;///< Frame counter.
dwordfltref;///< Reference for attaching messages/frame (described in #XFooters.h).
dwordhfl;///< Hardware footer length.
}XPFF;
///
/// @brief Device information structure
///
/// This structure holds all details needed to set up a connection to a discovered device.
/// Use this structure in combination with the XCD_EnumerateDevices()-function.
/// In case a direct connection using a protocol specific URL was established it is also
/// possible to catch the #XDeviceInformation-structure in the #XStatus-callback.
///
typedefstruct{
intsize;///< Should be set to sizeof(XDeviceInformation)
charname[64];///< String containing the device's model name
chartransport[64];///< Serial | CoaXPress | GigEVision | Network | CameraLink
charurl[256];///< URL identifying the camera internally. e.g. cam://0..n
charaddress[64];///< The address where the device resides, the format is protocol specific. e.g. 192.168.2.2 | COM0..n | CL0..n::( NationalInstruments | Euresys | Imperx ... )
unsignedintserial;///< Serial number reported by the camera. e.g. 0x12345678
unsignedintpid;///< Product id reported by the camera. e.g. 0x0000F020
XDeviceStatestate;///< Camera status to determine if the camera is in use at that time.
/// @param[in] pCameraName The camera connection URL as returned by GetDeviceList (!)\n
/// Special cameras:\n
/// \a "cam://select" Start Xeneth (if installed) to select a camera\n
/// \a "soft://0" Virtual camera (for application development without a camera)\n
/// Options:\n
/// \a "cam://x?fg=none" Start API in command & control mode (C&C). In this mode it is not possible to perform image acquisition.\n
/// \a "cam://x?fg=XFrameGrabberNative" Given the choice between using a CameraLink™ grabber and the native protocol (ether/usb..) use the native one.
///
/// @param[in] pCallBack Status callback function (See #XStatus)
/// @param[in] pUser User parameter for said callback function
///
/// @return A pointer to the created #XCamera-object, or a null pointer in case of an allocation error.