Files
handleaiuinew/env/basler/include/pylon/BaslerUniversalInstantCamera.h
T
2024-05-18 23:53:26 +08:00

213 lines
7.6 KiB
C++

//-----------------------------------------------------------------------------
// Basler pylon SDK
// Copyright (c) 2010-2023 Basler AG
// http://www.baslerweb.com
// Author: Andreas Gau
//-----------------------------------------------------------------------------
/*!
\file
\brief pylon universal instant camera class.
*/
#ifndef INCLUDED_BASLERUNIVERSALINSTANTCAMERA_H
#define INCLUDED_BASLERUNIVERSALINSTANTCAMERA_H
#pragma once
#include <pylon/_BaslerUniversalCameraParams.h>
#include <pylon/_BaslerUniversalStreamParams.h>
#include <pylon/_BaslerUniversalEventParams.h>
#include <pylon/_BaslerUniversalTLParams.h>
#include <pylon/BaslerUniversalConfigurationEventHandler.h>
#include <pylon/BaslerUniversalImageEventHandler.h>
#include <pylon/BaslerUniversalCameraEventHandler.h>
#include <pylon/BaslerUniversalGrabResultPtr.h>
#include <pylon/private/DeviceSpecificInstantCamera.h>
#include <pylon/gige/PylonGigEDevice.h>
#include <pylon/DeviceClass.h>
#include <pylon/NodeMapProxy.h>
#include <Base/GCException.h>
namespace Pylon
{
/** \addtogroup Pylon_InstantCameraApiUniversal
* @{
*/
class CBaslerUniversalInstantCamera;
/// Lists all the types used by the universal instant camera class.
struct CBaslerUniversalInstantCameraTraits
{
/// The type of the final camera class.
typedef CBaslerUniversalInstantCamera InstantCamera_t;
/// \copybrief Basler_UniversalCameraParams::CUniversalCameraParams_Params
typedef Basler_UniversalCameraParams::CUniversalCameraParams_Params CameraParams_t;
/// \copybrief Pylon::IPylonDevice
typedef IPylonDevice IPylonDevice_t;
/// \copybrief Pylon::CDeviceInfo
typedef Pylon::CDeviceInfo DeviceInfo_t;
/// \copybrief Basler_UniversalTLParams::CUniversalTLParams_Params
typedef CNodeMapProxyT<Basler_UniversalTLParams::CUniversalTLParams_Params> TlParams_t;
/// The parameters of the universal stream grabber.
typedef CNodeMapProxyT<Basler_UniversalStreamParams::CUniversalStreamParams_Params> StreamGrabberParams_t;
/// The parameters of the universal event grabber.
typedef CNodeMapProxyT<Basler_UniversalEventParams::CUniversalEventParams_Params> EventGrabberParams_t;
/// The universal configuration event handler class.
typedef CBaslerUniversalConfigurationEventHandler ConfigurationEventHandler_t;
/// The universal image event handler class.
typedef CBaslerUniversalImageEventHandler ImageEventHandler_t;
/// The universal camera event handler class.
typedef CBaslerUniversalCameraEventHandler CameraEventHandler_t;
/// The universal grab result data.
typedef CBaslerUniversalGrabResultData GrabResultData_t;
/// The universal grab result smart pointer.
typedef CBaslerUniversalGrabResultPtr GrabResultPtr_t;
//! Can be used to check whether the DeviceClass() can be used for enumeration.
static bool HasSpecificDeviceClass()
{
return false;
}
//! The name of this device class. Use this one for enumeration.
static String_t DeviceClass()
{
throw LOGICAL_ERROR_EXCEPTION( "The CBaslerUniversalInstantCamera has no specific device class. The method DeviceClass() cannot be used." );
}
};
/*!
\class CBaslerUniversalInstantCamera
\brief Extends the CInstantCamera by universal parameter interface classes combining all interface types.
*/
class CBaslerUniversalInstantCamera : public CDeviceSpecificInstantCameraT<CBaslerUniversalInstantCameraTraits>
{
public:
/*!
\copybrief CInstantCamera::CInstantCamera()
\copydetails CInstantCamera::CInstantCamera
*/
CBaslerUniversalInstantCamera()
{
}
/*!
\copybrief CInstantCamera::CInstantCamera( IPylonDevice* , ECleanup )
\copydetails CInstantCamera::CInstantCamera( IPylonDevice* , ECleanup )
*/
CBaslerUniversalInstantCamera( IPylonDevice* pDevice, ECleanup cleanupProcedure = Cleanup_Delete )
: CDeviceSpecificInstantCameraT<CBaslerUniversalInstantCameraTraits>( pDevice, cleanupProcedure )
{
}
/*!
\copybrief CInstantCamera::~CInstantCamera
\copydetails CInstantCamera::~CInstantCamera
*/
~CBaslerUniversalInstantCamera()
{
Attach( NULL );
InternalShutdownEventHandlers();
}
/*!
\brief Enables/disables use of persistent IP address and DHCP usage of the attached %Pylon Device.
See Pylon::IPylonGigEDevice::ChangeIpConfiguration()
\pre
<ul>
<li> A %Pylon Device is attached.
<li> The %Pylon Device is open.
</ul>
\error
The Instant Camera object is still valid after error.
\threading
This method is synchronized using the lock provided by GetLock().
*/
void ChangeIpConfiguration( bool EnablePersistentIp, bool EnableDhcp )
{
AutoLock lock( CInstantCamera::GetLock() );
GetGigEDevice()->ChangeIpConfiguration( EnablePersistentIp, EnableDhcp );
}
/*!
\brief Reads the persistent IP address from the attached %Pylon Device.
See Pylon::IPylonGigEDevice::GetPersistentIpAddress()
\pre
<ul>
<li> A %Pylon Device is attached.
<li> The %Pylon Device is open.
</ul>
\error
The Instant Camera object is still valid after error.
\threading
This method is synchronized using the lock provided by GetLock().
*/
void GetPersistentIpAddress( String_t& IpAddress, String_t& SubnetMask, String_t& DefaultGateway )
{
AutoLock lock( CInstantCamera::GetLock() );
GetGigEDevice()->GetPersistentIpAddress( IpAddress, SubnetMask, DefaultGateway );
}
/*!
\brief Writes a persistent IP address to the attached %Pylon Device.
See Pylon::IPylonGigEDevice::SetPersistentIpAddress()
\pre
<ul>
<li> A %Pylon Device is attached.
<li> The %Pylon Device is open.
</ul>
\error
The Instant Camera object is still valid after error.
\threading
This method is synchronized using the lock provided by GetLock().
*/
void SetPersistentIpAddress( const String_t& IpAddress,
const String_t& SubnetMask,
const String_t& DefaultGateway )
{
AutoLock lock( CInstantCamera::GetLock() );
GetGigEDevice()->SetPersistentIpAddress( IpAddress, SubnetMask, DefaultGateway );
}
protected:
//Get the pointer for the Universal device.
virtual IPylonGigEDevice* GetGigEDevice()
{
IPylonDevice* pDevice = CInstantCamera::GetDevice();
IPylonGigEDevice* pGigEDevice = dynamic_cast<IPylonGigEDevice*>(pDevice);
// Check whether device type matches camera type.
if (!pGigEDevice)
{
throw LOGICAL_ERROR_EXCEPTION( "The attached pylon device type must be a GigE device." );
}
return pGigEDevice;
}
//Create device grab result data. Is subject to change without notice.
virtual CGrabResultData* CreateDeviceSpecificGrabResultData()
{
return new GrabResultData_t();
}
};
/**
* @}
*/
} // namespace Pylon
#endif /* INCLUDED_BASLERUNIVERSALINSTANTCAMERA_H */