//-----------------------------------------------------------------------------
#ifndef DevDataH
#define DevDataH DevDataH
//-----------------------------------------------------------------------------
#include <mvIMPACT_CPP/mvIMPACT_acquire.h>
#include <vector>
#include <wx/wx.h>

class CaptureThread;
class EventThread;
class PropTree;

//-----------------------------------------------------------------------------
enum TCaptureSettingUsageMode
//-----------------------------------------------------------------------------
{
	csumManual,
	csumAutomatic
};

typedef std::vector<PropTree*> PropTreeVector;

//------------------------------------------------------------------------------
struct DeviceData
//------------------------------------------------------------------------------
{	
	DeviceData( PropTree *pDev ) : pDeviceTree(pDev), pEventSubSubsystem(0), pFuncInterface(0),
		pStatistics(0), pInfo(0), pCaptureThread(0), pEventThread(0), boWasLive(false), lockedRequest(mvIMPACT::acquire::INVALID_ID) {}
	PropTree*								pDeviceTree;
	PropTreeVector							vDriverTrees;
	mvIMPACT::acquire::EventSubSystem*		pEventSubSubsystem;
	mvIMPACT::acquire::FunctionInterface*	pFuncInterface;
	mvIMPACT::acquire::Statistics*			pStatistics;
	mvIMPACT::acquire::Info*				pInfo;
	CaptureThread*							pCaptureThread;
	EventThread*							pEventThread;
	bool									boWasLive;
	int										lockedRequest;
};

//-----------------------------------------------------------------------------
struct RequestInfoData
//-----------------------------------------------------------------------------
{
	int frameID;
	int frameNr;
	int exposeStart_us;
	int exposeTime_us;
	int transferDelay_us;
	double gain_dB;
	int64_type timeStamp_us;
	HOBJ settingUsed;
	int videoChannel;
	TCameraOutput cameraOutputUsed;
	int lineCounter;
};

//-----------------------------------------------------------------------------
struct RequestData
//-----------------------------------------------------------------------------
{
	mvIMPACT::acquire::ImageBufferDesc		image_;
	mvIMPACT::acquire::TBayerMosaicParity	bayerParity_;
	wxString								pixelFormat_;
	RequestInfoData							requestInfo_;
	int										requestNr_;
	static const wxString					UNKNOWN_PIXEL_FORMAT_STRING_;
	explicit RequestData();
};

#endif // DevDataH
