OxfordControllerWrapper.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. #pragma once
  2. #include "../OTSControl/Oxford/OxfordImplConst.h"
  3. //#include "OxfordXrayData1.h"
  4. using namespace System::Collections::Generic;
  5. using namespace System::Threading;
  6. using namespace OINA::Extender;
  7. using namespace OINA::Extender::Data;
  8. using namespace OINA::Extender::Data::Ed;
  9. using namespace OINA::Extender::Data::Image;
  10. using namespace OINA::Extender::MicroscopeControl;
  11. using namespace OINA::Extender::Acquisition;
  12. using namespace OINA::Extender::Acquisition::Ed;
  13. using namespace OINA::Extender::Acquisition::Image;
  14. using namespace OINA::Extender::Acquisition::Quant;
  15. using namespace OINA::Extender::Controls;
  16. using namespace OINA::Extender::Controls::Common;
  17. using namespace OINA::Extender::Controls::Image;
  18. using namespace OINA::Extender::Controls::Spectrum;
  19. using namespace OINA::Extender::Processing;
  20. using namespace OINA::Extender::Processing::Ed;
  21. using namespace OINA::Extender::Processing::Quant;
  22. //using namespace OINA::Extender::Testharness::Properties;
  23. using namespace OTSController;
  24. ref class OxfordControllerWrapper
  25. {
  26. enum class OxfordControllerCommand
  27. {
  28. WAITING = 0,
  29. GET_WORKINGDISTANCE = 1,
  30. SET_WORKINGDISTANCE = 2,
  31. GET_POSITIONXY = 3,
  32. SET_POSITIONXY = 4,
  33. GET_MAGNIFICATION = 5,
  34. SET_MAGNIFICATION = 6,
  35. GET_HIGHVOTAGE = 7,
  36. SET_HIGHVOTAGE = 8,
  37. GET_BEAMON = 9,
  38. SET_BEAMON = 10,
  39. GET_BEAMBLANK = 11,
  40. SET_BEAMBLANK = 12,
  41. GET_EXTERNAL = 13,
  42. SET_EXTERNAL = 14,
  43. COLLECT_IMAGE = 15,
  44. COLLECT_XRAYPOINT = 16,
  45. COLLECT_CURRENTXRAYPOINT = 17,
  46. COLLECT_XRAYPOINTS = 18,
  47. COLLECT_QUANTIFYSPECTRUM = 19,
  48. COLLECT_XRAYCHOILDLIST = 20,
  49. STOP_ACQUISITION=21,
  50. END_MULTIPLEACQUISITION = 22,
  51. EXIT = 100,
  52. };
  53. enum class OxfordControllerState
  54. {
  55. READY = 0,
  56. WORKING = 1,
  57. SUCCEEDED = 2,
  58. FAILED = 3,
  59. ABORT = 4
  60. };
  61. ref struct Element
  62. {
  63. int m_nAotomaticNo;
  64. double m_dWeight;
  65. };
  66. //interface input/output
  67. ref struct OxfordControllerData
  68. {
  69. OxfordControllerData()
  70. : m_nState(OxfordControllerState::READY)
  71. , m_nCommand(OxfordControllerCommand::WAITING)
  72. , m_pImageBits(nullptr)
  73. , m_pXrayDataList(nullptr)
  74. , m_pSpectrumData(nullptr)
  75. {
  76. //m_dataLock = gcnew Object();
  77. m_nCollectedPixelCounts = 0;
  78. m_nCollectedChordsCount = 0;
  79. }
  80. OxfordControllerState m_nState;
  81. OxfordControllerCommand m_nCommand;
  82. double m_dPositionX;
  83. double m_dPositionY;
  84. double m_dWorkingDistance;
  85. double m_dMagnification;
  86. double m_dHighVotage;
  87. bool m_bBeamOn;
  88. bool m_bBeamBlank;
  89. bool m_bExternal;
  90. long m_nImageWidth;
  91. long m_nImageHeight;
  92. double m_dPixelSize;
  93. BYTE* m_pImageBits;
  94. double m_dBeamPositionX;
  95. double m_dBeamPositionY;
  96. long* m_pSpectrumData;
  97. OxfordXrayData* m_pXrayDataList; //multi points
  98. long m_nAcTime; // xray collect time
  99. DWORD m_nBufferSize;
  100. // feature计数控制
  101. long m_nXrayDataCount;
  102. long m_nCollectedXrayCounts;
  103. // 当前feature的chords数控制
  104. long m_nChordsNum;
  105. long m_nCollectedChordsCount;
  106. // 当前feature的pixel数控制
  107. long m_nCollectedPixelCounts;
  108. long m_nPixelNum;
  109. List<Element^ >^ m_listElementResult;
  110. System::String^ m_sElementResult; //one point
  111. // should lock data every time read / write
  112. //Object^ m_dataLock;
  113. };
  114. public:
  115. OxfordControllerWrapper(void);
  116. ~OxfordControllerWrapper();
  117. !OxfordControllerWrapper();
  118. void CloseClient();
  119. bool Init();
  120. bool IsConnected();
  121. bool GetPositionXY(double& a_dPosX, double& a_dPosY);
  122. bool SetPositionXY(const double a_dPosX, const double a_dPosY);
  123. bool GetWorkingDistance(double& a_dWorkingDistance);
  124. bool SetWorkingDistance(double a_dWorkingDistance);
  125. bool GetMagnification(double& a_dMagnification);
  126. bool SetMagnification(double a_dMagnification);
  127. bool GetHighVoltage(double& a_dHighVoltage);
  128. bool SetHighVoltage(double a_dHighVoltage);
  129. bool GetBeamOn(bool& a_bBeamOn);
  130. bool SetBeamOn(bool a_bBeamOn);
  131. bool GetBeamBlank(bool& a_bBeamBlank);
  132. bool SetBeamBlank(bool a_bBeamBlank);
  133. bool GetExternalScan(bool& a_bExternal);
  134. bool SetExternalScan(bool a_bExternal);
  135. bool SetBeamPosition(const double a_dPosX, const double a_dPosY);
  136. bool CollectXrayPoint(const double a_dPosX, const double a_dPosY, const long a_nAcTime, long* a_pSpectrumData, DWORD a_nBufferSize);
  137. bool CollectXrayPoint(const long a_nAcTime, long* a_pSpectrumData, DWORD a_nBufferSize);
  138. bool CollectXrayPoints(const long a_nAcTime, OxfordXrayData* a_pXrayDataList, const long a_nXrayDataCount, DWORD a_nBufferSize);
  139. bool CollectXrayArea(const long a_nAcTimeMilliseconds, OxfordXrayData* a_pXrayDataList, const long a_nXrayDataCount, DWORD a_nBufferSize);
  140. bool SetScanSpeed(const long a_nMilliseconds);
  141. bool GetImageSize(long& a_nWidth, long& a_nHeight);
  142. bool SetImageSize(const long a_nWidth, const long a_nHeight);
  143. bool CollectImage(BYTE* a_pImageBits);
  144. bool CollectImage(int a);
  145. bool QuantifySpectrum(unsigned char* cResult);
  146. protected:
  147. bool GetPositionXYFromController(double& a_dPosX, double& a_dPosY);
  148. bool SetPositionXYToController(const double a_dPosX, const double a_dPosY);
  149. bool GetWorkingDistanceFromController(double& a_dWorkingDistance);
  150. bool SetWorkingDistanceToController(double a_dWorkingDistance);
  151. bool GetMagnificationFromController(double& a_dMagnification);
  152. bool SetMagnificationToController(double a_dMagnification);
  153. bool GetHighVoltageFromController(double& a_dHighVoltage);
  154. bool SetHighVoltageToController(double a_dHighVoltage);
  155. bool GetBeamOnFromController(bool& a_bBeamOn);
  156. bool SetBeamOnToController(bool a_bBeamOn);
  157. bool GetBeamBlankFromController(bool& a_bBeamBlank);
  158. bool SetBeamBlankToController(bool a_bBeamBlank);
  159. bool GetExternalScanFromController(bool& a_bExternal);
  160. bool SetExternalScanToController(bool a_bExternal);
  161. bool SetCurrentBeamPosition();
  162. bool IsXrayCollecting();
  163. bool IsImageCollecting();
  164. bool IsQuantifySpectrumCollecting();
  165. IStageConditions^ GetStageConditions();
  166. void OnMicroscopeColumnUpdated(Object^ /*sender*/, OINA::Extender::MicroscopeControl::ColumnEventArgs^ /*e*/)
  167. {
  168. m_bIsColumnUpdated = true;
  169. }
  170. void OnMicroscopeStageUpdated(Object^ /*sender*/, OINA::Extender::MicroscopeControl::StageEventArgs^ /*e*/)
  171. {
  172. m_bIsStageUpdated = true;
  173. }
  174. bool m_bIsStageUpdated;
  175. bool m_bIsColumnUpdated;
  176. bool IsMicroscopeColumnConnected();
  177. bool IsMicroscopeStageConnected();
  178. bool StartXrayCollecting(const long a_nAcTime);
  179. bool StopXrayCollecting();
  180. void OnXrayAcquisitionFinished(Object^ sender, OINA::Extender::Acquisition::AcquisitionFinishedEventArgs<OINA::Extender::Data::Ed::IEdSpectrum^>^ e);
  181. void OnXrayChordlistFinished(Object^ sender, OINA::Extender::Acquisition::AcquisitionFinishedEventArgs<OINA::Extender::Data::Ed::IEdMap^>^ e);
  182. bool ConvertSpectrumData(IEdSpectrum^ a_spectrum, long* a_pSpectrumData, int a_nBufferSize);
  183. bool StartImageCollecting();
  184. bool StopImageCollecting();
  185. void OnImageAcquisitionFinished(Object^ /*sender*/, OINA::Extender::Acquisition::AcquisitionFinishedEventArgs<array<OINA::Extender::Data::Image::IElectronImage^ >^ >^ e);
  186. void OnController_PixelProcessed(Object^ /*sender*/, OINA::Extender::EventArgs<OINA::Extender::Processing::Quant::IPixelSEMQuantStatus^ >^ e);
  187. void OnController_ExperimentFinished(Object^ /*sender*/, OINA::Extender::Acquisition::AcquisitionFinishedEventArgs^ e);
  188. bool ReadImageData(IElectronImage^ a_electronImage, BYTE* a_pImageBits);
  189. void LogMessage(CString a_sMessage);
  190. IMicroscopeController^ CreateMicroscopeController();
  191. IEdSpectrumAcquisitionController^ CreateEdsSpectrumController();
  192. IEdSpectrumSettings^ GetEdsSpectrumSettings();
  193. IImageAcquisitionController^ CreateImageAcqusitionController();
  194. IImageAcquisitionSettings^ GetImageAcqusitionSettings();
  195. // IQuantCalibrationController^ CreateQuantCalibrationController();
  196. // IQuantCalibrationSettings^ GetQuantCalibrationSettings();
  197. IEdChordListAcquisitionController^ CreateChordlistController();
  198. IEdChordListSettings^ GetChordlistSettings();
  199. IMicroscopeController^ _microscopeController;
  200. IEdSpectrumAcquisitionController^ _edSpectrumController;
  201. IEdSpectrumSettings^ _edsSpectrumSettings;
  202. IEdChordListSettings^ _edsChordListSetting;
  203. IEdChordListAcquisitionController^ _edsChordListController;
  204. IEdChordListScanCapabilities^ _edsChordListScanCapablities;
  205. IImageAcquisitionController^ _imageAcqusitionController;
  206. IImageAcquisitionSettings^ _imageAcqusitionSettings;
  207. IQuantCalibrationController^ _SEMQuantController;
  208. IQuantCalibrationSettings^ _SEMQuantSettings;
  209. ISEMQuantCapabilities^ _SEMQuantCapabilities;
  210. static Object^ GetSpectrumLockObject()
  211. {
  212. if (spectrumSyncLock == nullptr)
  213. {
  214. spectrumSyncLock = gcnew Object();
  215. }
  216. return spectrumSyncLock;
  217. }
  218. static Object^ spectrumSyncLock;
  219. void ControllerThreadFunction();
  220. Thread^ _controllerThread;
  221. AutoResetEvent^ m_startControllerEvent;
  222. AutoResetEvent^ m_endControllerEvent;
  223. OxfordControllerData _oxfordControllerData;
  224. bool m_bBeamPositionSet;
  225. //LogFunction* m_logFuntion;
  226. };
  227. ref class ManagedGlobals
  228. {
  229. public:
  230. static OxfordControllerWrapper^ oxfordController = nullptr;
  231. };