DynBoxDevice.hpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #pragma once
  2. #include "IODeviceWithSCF.tlh"
  3. #include "IODeviceWithSCF.tli"
  4. #include "DIOS.Dev.SYNBOX.Mould.hpp"
  5. #include "DIOS.Dev.MSGMould.hpp"
  6. namespace DIOS::Dev::Detail::SYNBOX
  7. {
  8. typedef struct Sync_Element_s
  9. {
  10. string strIO;
  11. string strSyncName;
  12. string pFun;
  13. int EnableState;
  14. int DisableState;
  15. }Sync_Element_t;
  16. typedef struct DYNHeader_s
  17. {
  18. map<string, bool> m_MapChannelState;
  19. map<string, Sync_Element_t>m_SyncList;
  20. }DYNHeader_t;
  21. //-----------------------------------------------------------------------------
  22. // DynBoxDevice
  23. //-----------------------------------------------------------------------------
  24. namespace nDev = DIOS::Dev;
  25. namespace nsDetail = DIOS::Dev::Detail;
  26. class DynBoxDevice : public SYNBOXMould
  27. {
  28. using superGen = SYNBOXMould;
  29. public:
  30. DynBoxDevice(std::shared_ptr <IOEventCenter> center, nsSCF::SCF SCF);
  31. ~DynBoxDevice();
  32. ResDataObject ResDYNConfig;
  33. protected:
  34. // 由工作流调用
  35. virtual RET_STATUS SetWS(std::string value) override;
  36. virtual RET_STATUS SetExpMode(std::string value) override; //设置曝光模式,signalrad或者series 可以通过模式设定决策读取同步盒不同曝光模式下的配置文件
  37. virtual RET_STATUS SetGeneratortoSyncStatus(int state) override; //
  38. virtual RET_STATUS SetExpEnable() override;
  39. virtual RET_STATUS SetExpDisable() override;
  40. virtual RET_STATUS PrepareAcquisition() override;
  41. virtual RET_STATUS StartWindowRequest() override;
  42. virtual RET_STATUS SetExposureTimes(int nNum) override;
  43. virtual RET_STATUS StopWindowRequest() override;
  44. virtual RET_STATUS SetFrameRate(FLOAT frameRate) override;
  45. virtual RET_STATUS SetGenAECSignal(int signal) override;
  46. virtual RET_STATUS SimulateFootSwitchSignal(int signal) override;
  47. virtual RET_STATUS SetValue_PPS(FLOAT fluframeRate) override;
  48. private:
  49. std::unique_ptr<nsDetail::MSGUnit> m_MSGUnit;
  50. private:
  51. //int ChartoInt(char uc);
  52. //int CalChecksum(const char* cCmd, int nCmdSize);
  53. //bool FormatCmd(char* cCmd, int& nSize);
  54. //bool CmdtoString(const char* cCmd, int nCmdSize, string& strCmd);
  55. RET_STATUS SendBySCF(const char* chChannelID, bool bStatus);
  56. RET_STATUS SendSPSBySCF(const char* chChannelID, int nCycle, int nPulse, int nWaitTime); //发送设置PWM参数的指令 频率脉宽
  57. RET_STATUS SendSPEBySCF(const char* chChannelID, UCHAR cMode, UCHAR cEnable, int nWaitTime); //发送使能PWM参数生效的指令(让TIC信号开始发送)
  58. RET_STATUS SendSMSBySCF(const char* cExpMode, const char* cExpCount, int nWaitTime); // 发送曝光模式切换的指令
  59. int DealReceiveData(string sCmdID, const char* pData, int Datalen); //处理遮光器指令的
  60. int NotifySignal(const char* name, int state); //根据盒子收到的信号,把状态传递到上层。
  61. int SetSignal(const char* name, int state); // 发送信号给到硬件
  62. void ClearSignal(); //把所有配置在out的指令都按照不生效都下发一遍
  63. int SetPWMState(bool state); //使能pwm参数
  64. int SetPWM(float fpps); //设置pwm参数
  65. int SetAreaType(); //设置曝光模式
  66. int m_nCurrentExpTimes{ 0 };
  67. DYNHeader_t m_DYNMap;
  68. bool m_bINEEnable{ false };
  69. int m_nExpTimes{ -1 };
  70. std::string m_strSYNMode;
  71. bool m_nInExpState{ false };
  72. DWORD m_wStartEXPTime;
  73. bool m_bClear{ false };
  74. nsSCF::SCF m_SCF;
  75. std::shared_ptr <IOEventCenter> EventCenter;
  76. public:
  77. void Register(Dispatch* Dispatch);
  78. void OnCallBack();
  79. int DealtheSignal(const char* channel, int state); // 处理信号
  80. //3DDR因手闸连在机架上,所以使用特殊方法模拟收到手闸信号
  81. RET_STATUS SimulateHandSwitchSignal(string channel, int state);
  82. // add by lsy 是否由同步盒更新出线状态(X-RAYOUT)
  83. bool m_bSynUpdataGenerStatus{ false };
  84. float m_DefaultExpFrameRate;
  85. int m_DefaultExpTimes;
  86. private:
  87. void FireNotify(std::string key, std::string context);
  88. //
  89. string m_strPreExpMode;
  90. bool m_bSendXindowOnMessage{ false };
  91. bool m_bSendXindowOffMessage{ false };
  92. int SetFootSwitchStatus(int signal);
  93. //int m_nWindosOnNum{ 0 };
  94. //int m_nWindosOffNum{ 0 };
  95. };
  96. }