| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 | #include "stdafx.h"#include "COTSHardwareMgr.h" #include "Bruker\OTSSEMBruker.h"#include "Simulate\OTSSemSim.h"#include "Simulate\OTSEDSSim.h"#include "Simulate\OTSScanSim.h"#include "Bruker\OTSEDSBrucker.h"#include "Bruker\OTSScanBrucker.h"#include "Oxford\OTSEDSOxford.h"#include "Oxford\OTSScanOxford.h"#include "Oxford\OTSSEMOxford.h"namespace OTSController {	const CString cssSubKeyRegeditPath = "SOFTWARE\\OTSDevName";	const CString csKey_DevName = "SEMName";	const CString csKey_EDSName = "EDSName";	//	char* lpSemName[] = { "OffLine","Bruker","ESEM","ZEISS" ,"Oxford"};	char* lpEdsName[] = { "OffLine","Bruker" ,"Oxford"};		//XMLÎļþÃû	const CString szXMLFileName = "./Config/ProData/HardwareConfig.xml";	CString szSemName=_T(""), szEdsName= _T(""); typedef enum class SemDevID	{				Invalid = -1,		OFFLINE = 0,		BRUKER = 1,		ESEM = 2,		ZEISS = 3,			OXFORD = 4,	}SEM_DEV_ID; typedef enum class EDSDevID {	 Invalid = -1,	 OFFLINE = 0,	 BRUKER = 1,	 OXFORD = 2, }EDS_DEV_ID;	COTSHardwareMgr::COTSHardwareMgr()	{		m_SemBasePtr = nullptr;		m_EDSPtr = nullptr;		m_SCanPtr = nullptr;	}	COTSHardwareMgr::~COTSHardwareMgr()	{	}	CSemBasePtr COTSHardwareMgr::GetSemControllerMgrPtr()// this is the same as the constructor of singleton.So we cann't put expensive operation in it,such as the "connect" operation	{			if (nullptr == m_SemBasePtr)		{			int iDevID = -1;			if (szSemName == _T(""))			{				if (!this->GetXMLVal(szXMLFileName, szSemName, szEdsName))				{					return nullptr;				}			}			LogTrace(__FILE__, __LINE__, "(COTSHardwareMgr::GetSemControllerMgrPtr) SemName = %s,  EdsName = %s", szSemName, szEdsName);			iDevID = this->GetSemControllerID(szSemName);			switch (iDevID)			{				case (int)SEM_DEV_ID::BRUKER:				{						m_SemBasePtr = CSemBasePtr(new COTSSEMBruker());										break;				}				case (int)SEM_DEV_ID::OFFLINE:				{						m_SemBasePtr = CSemBasePtr(new COTSSemSim());						         				break;				}				case (int)SEM_DEV_ID::OXFORD:				{							m_SemBasePtr = CSemBasePtr(new COTSSEMOxford());														break;				}				default:					break;			}								}				return m_SemBasePtr;	}	COTSEDSBasePtr COTSHardwareMgr::GetEDSControllerPtr()	{					if (nullptr == m_EDSPtr)		{			int iDevID = -1;			if (szEdsName == _T(""))			{				if (!this->GetXMLVal(szXMLFileName, szSemName, szEdsName))				{					return nullptr;				}			}			iDevID = this->GetEDSControllerID(szEdsName);			switch (iDevID)			{				case (int)EDS_DEV_ID::BRUKER:				{									m_EDSPtr = COTSEDSBasePtr(new COTSEDSBrucker());									break;				}				case (int)EDS_DEV_ID::OFFLINE:				{										m_EDSPtr = COTSEDSBasePtr(new COTSEDSSim());									break;				}				case (int)EDS_DEV_ID::OXFORD:				{										m_EDSPtr = COTSEDSBasePtr(new COTSEDSOxford());									break;				}				default:					break;			}								}					return m_EDSPtr;	}	COTSScanBasePtr COTSHardwareMgr::GetScanControllerPtr()	{		if (nullptr == m_SCanPtr)		{			int iDevID = -1;			if (szEdsName == _T(""))			{				if (!this->GetXMLVal(szXMLFileName, szSemName, szEdsName))				{					return nullptr;				}			}			iDevID = this->GetEDSControllerID(szEdsName);			switch (iDevID)			{				case (int)EDS_DEV_ID::BRUKER:				{						m_SCanPtr = COTSScanBasePtr(new COTSScanBrucker());					break;				}				case (int)EDS_DEV_ID::OFFLINE:				{						m_SCanPtr = COTSScanBasePtr(new COTSScanSim());					break;				}				case (int)EDS_DEV_ID::OXFORD:				{						m_SCanPtr = COTSScanBasePtr(new COTSScanOxford());					break;				}				default:					break;			}				}				return m_SCanPtr;	}	BOOL COTSHardwareMgr::GetXMLVal(const CString& szXmlFileName, CString& szSemName, CString& szEdsName)	{				tinyxml2::XMLDocument doc;		doc.LoadFile(szXMLFileName);//ÔØÈëxmlÎļþ		xmls::xString szS;		xmls::xString szE;		xmls::Slo subClass;		xmls::Slo subClass1;		subClass.Register("Value", &szS);		 subClass1.Register ("Value",&szE);		subClass.Register("SemControllerName", &subClass);				subClass.Register("EDSName", &subClass1);		tinyxml2::XMLElement *rootNode;		rootNode = doc.FirstChildElement(RootClassName);		subClass.Serialize(false, &doc, rootNode);		szSemName = szS.value().c_str();		szEdsName = szE.value().c_str();		return true;	}		//return array Index when ControllerName match for name in array 	int COTSHardwareMgr::GetSemControllerID(const CString& SemControllerName)	{		int iLen = sizeof(lpSemName) /sizeof(*lpSemName);		int i = 0;		for (i=0; i<iLen; i++)		{			if (0 == strcmp(lpSemName[i], SemControllerName))			{				return i;			}					}		return -1;			}	//return array Index when ControllerName match for name in array 	int COTSHardwareMgr::GetEDSControllerID(const CString& EDSControllerName)	{		int iLen = sizeof(lpEdsName) / sizeof(*lpEdsName);		int i = 0;		for (i = 0; i < iLen; i++)		{			if (0 == strcmp(lpEdsName[i], EDSControllerName))			{				return i;			}		}		return -1;	}	}
 |