//---------------------------
//- @brief constructor
//---------------------------
lima::Andor3::Interface::Interface(lima::Andor3::Camera& cam) :
m_cam(cam),
m_cap_list()
{
  DEB_CONSTRUCTOR();
  
  m_det_info = new DetInfoCtrlObj(m_cam, this);
  m_sync = new SyncCtrlObj(m_cam);
  m_roi = new RoiCtrlObj(m_cam, this);
  m_bin = new BinCtrlObj(m_cam, this);
  m_reconstruction = new ReconstructionCtrlObj(m_cam);

  // Taking care of the content of the CapList, once for all :
  m_cap_list.push_back(HwCap(m_det_info));
  m_cap_list.push_back(m_cam.getBufferCtrlObj());
  m_cap_list.push_back(m_sync);
  m_cap_list.push_back(HwCap(m_roi));
  m_cap_list.push_back(HwCap(m_bin));
  m_cap_list.push_back(HwCap(m_reconstruction));

}
//-----------------------------------------------------
// @brief
//-----------------------------------------------------
lima::Andor3::BinCtrlObj::BinCtrlObj(Camera &cam, Interface *interface)
: m_cam(cam), m_interface(interface)
{
  DEB_CONSTRUCTOR();
}
Camera::Camera(const char *params) :
	m_cam_connected(false),
	m_acq_frame_nb(1),
	m_sync(NULL),
	m_buffer(NULL),
	m_handle(NULL),
	m_Roi_lastFixed_time(0),
	m_pco_buffer_nrevents(PCO_BUFFER_NREVENTS),
	bRecorderForcedFifo(false)
{
	DEF_FNID;
	DEB_CONSTRUCTOR();

	int error=0;
	m_config = TRUE;
	DebParams::checkInit();

	
	m_msgLog = new ringLog(300) ;
	m_tmpLog = new ringLog(300) ;
	if(m_msgLog == NULL)
		throw LIMA_HW_EXC(Error, "m_msgLog > creation error");
	if(m_tmpLog == NULL)
		throw LIMA_HW_EXC(Error, "m_tmpLog > creation error");

	m_pcoData =new stcPcoData();
	if(m_pcoData == NULL)
		throw LIMA_HW_EXC(Error, "m_pcoData > creation error");


	m_checkImgNr = new CheckImgNr(this);


	// properties: params 
	paramsInit(params);

	char *value;
	const char  *key;
	bool ret;
	int iValue;

	/***
	key = "test";
	key = "withConfig";
	key = "testMode";
	key = "debugPco";
	***/
	key = "testMode";
	ret = paramsGet(key, value);
	if(ret) {m_pcoData->testCmdMode = _atoi64(value);}

	key = "acqTimeoutRetry";
	ret = paramsGet(key, value);
	iValue = ret ? atoi(value) : 3;
	m_pcoData->acqTimeoutRetry = (iValue < 0 ) ? 0 : iValue;

	// patch in xMinSize meanwhile firmware for CLHS 1.19 is fixed
	key = "xMinSize";
	m_pcoData->params_xMinSize = !!paramsGet(key, value);

	// ignore the nbMaxImages calculated for dimax HS
	key = "ignoreMaxImages";
	m_pcoData->params_ignoreMaxImages = !!paramsGet(key, value);


	DEB_ALWAYS()
		<< ALWAYS_NL << DEB_VAR1(m_pcoData->version) 
		<< ALWAYS_NL << _checkLogFiles(true);

	//m_bin.changed = Invalid;
	
	_init();
	m_config = FALSE;
	_setActionTimestamp(tsConstructor);
}