V2COMBoxDevice.hpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #pragma once
  2. #include <atomic>
  3. #include "IODeviceWithSCF.tlh"
  4. #include "IODeviceWithSCF.tli"
  5. #include "DIOS.Dev.SYNBOX.Mould.hpp"
  6. #include "DIOS.Dev.MSGMould.hpp"
  7. #include "OEM.Collimator.h"
  8. #include "OEM.Mechanical.h"
  9. #define V2COM_HeartBeat_Enable 0
  10. namespace DIOS::Dev::Detail::SYNBOX
  11. {
  12. typedef struct Sync_Element_s
  13. {
  14. string strIO;
  15. string strSyncName;
  16. string pFun;
  17. int EnableState;
  18. int DisableState;
  19. }Sync_Element_t;
  20. typedef struct DYNHeader_s
  21. {
  22. map<string, bool> m_MapChannelState;
  23. map<string, Sync_Element_t>m_SyncList;
  24. }DYNHeader_t;
  25. //-----------------------------------------------------------------------------
  26. // V2COMBoxDevice
  27. //-----------------------------------------------------------------------------
  28. namespace nDev = DIOS::Dev;
  29. namespace nsDetail = DIOS::Dev::Detail;
  30. class V2COMBoxDevice : public SYNBOXMould
  31. {
  32. using superGen = SYNBOXMould;
  33. public:
  34. V2COMBoxDevice(std::shared_ptr <IOEventCenter> center, nsSCF::SCF SCF, string configfile);
  35. ~V2COMBoxDevice();
  36. //add by wxx : 新增重连提醒
  37. void ReConnect(string &errorList); //true -> 开始重连处理;false -> 完成重连操作
  38. void FireErrorMessage(const bool Act, const int Code, const char* ResInfo = "");
  39. ResDataObject ResDYNConfig;
  40. ResDataObject m_SYNConfig; //driver's config file.
  41. protected:
  42. virtual nDev::RET_STATUS SetWS(std::string value) override;
  43. virtual nDev::RET_STATUS SetExpMode(std::string value) override;
  44. virtual nDev::RET_STATUS SetGeneratortoSyncStatus(int state) override;
  45. virtual nDev::RET_STATUS SetExpEnable() override;
  46. virtual nDev::RET_STATUS SetExpDisable() override;
  47. virtual nDev::RET_STATUS PrepareAcquisition() override;
  48. virtual nDev::RET_STATUS StartWindowRequest() override;
  49. virtual nDev::RET_STATUS SetExposureTimes(int nNum) override;
  50. virtual nDev::RET_STATUS StopWindowRequest() override;
  51. virtual nDev::RET_STATUS SetFrameRate(FLOAT frameRate) override;
  52. virtual nDev::RET_STATUS SetGenAECSignal(int signal) override;
  53. private:
  54. bool StartHardwareThread();
  55. static DWORD HardwareStatusThread(LPVOID pParam);
  56. void SendHeartBeat();
  57. HANDLE m_pHardwareThread;
  58. std::unique_ptr<nsDetail::MSGUnit> m_MSGUnit;
  59. atomic<int> m_iHeartBeats; //心跳统计
  60. atomic<bool> m_bConnectFlag; //连接标记
  61. void QueryInfo();
  62. private:
  63. //int ChartoInt(char uc);
  64. //int CalChecksum(const char* cCmd, int nCmdSize);
  65. //bool FormatCmd(char* cCmd, int& nSize);
  66. //bool CmdtoString(const char* cCmd, int nCmdSize, string& strCmd);
  67. nDev::RET_STATUS SendBySCF(const char* chChannelID, bool bStatus);
  68. //nDev::RET_STATUS SendSPSBySCF(const char* chChannelID, int nCycle, int nPulse, int nWaitTime);
  69. //nDev::RET_STATUS SendSPEBySCF(const char* chChannelID, UCHAR cMode, UCHAR cEnable, int nWaitTime);
  70. //nDev::RET_STATUS SendSMSBySCF(const char* cExpMode, const char* cExpCount, int nWaitTime);
  71. int DealReceiveData(string sCmdID, const char* pData, int Datalen);
  72. int NotifySignal(const char* name, int state);
  73. void ClearSignal();
  74. int SetSignal(const char* name, int state);
  75. //int SetPWMState(bool state);
  76. int SetPWM(float fpps);
  77. //int SetAreaType();
  78. int m_nCurrentExpTimes{ 0 };
  79. DYNHeader_t m_DYNMap;
  80. bool m_bINEEnable{ false };
  81. int m_nExpTimes{ -1 };
  82. std::string m_strSYNMode{"SYN0"};
  83. bool m_nInExpState{ false };
  84. DWORD m_wStartEXPTime;
  85. bool m_bClear{ false };
  86. nsSCF::SCF m_SCF;
  87. std::shared_ptr <IOEventCenter> EventCenter;
  88. int m_nGenSynStateSignal{ 0 }; //add by wxx:解决OT1信号在 配置 及 工作流中重复发送的问题
  89. bool m_bGenAECModeFlag{ false };
  90. public:
  91. void Register(Dispatch* Dispatch);
  92. void OnCallBack();
  93. int DealtheSignal(const char* channel, int state);
  94. void DealtheHB(const char* channel, int state);
  95. nDev::RET_STATUS HWSend(char* strCommand, int nTimeOut=200);
  96. virtual nDev::RET_STATUS SetFilter(int filter);
  97. virtual nDev::RET_STATUS SetCollimatorDev(OemCollimator* dev);
  98. virtual nDev::RET_STATUS SetMechDev(OemMechanical* dev);
  99. nDev::RET_STATUS SetGrid(unsigned int GridType);
  100. std::unique_ptr<OemCollimator> m_pCollDev;
  101. std::unique_ptr<OemMechanical> m_pMechDev;
  102. void DealReceiveData(char* data_can, int length_can_data);
  103. private:
  104. void FireNotify(std::string key, std::string context);
  105. bool m_bSetBaudOK;//not use now
  106. };
  107. }