#pragma once #include "IODeviceWithSCF.tlh" #include "IODeviceWithSCF.tli" #include "DIOS.Dev.SYNBOX.Mould.hpp" #include "DIOS.Dev.MSGMould.hpp" namespace DIOS::Dev::Detail::SYNBOX { typedef struct Sync_Element_s { string strIO; string strSyncName; string pFun; int EnableState; int DisableState; }Sync_Element_t; typedef struct DYNHeader_s { map m_MapChannelState; mapm_SyncList; }DYNHeader_t; //----------------------------------------------------------------------------- // DynBoxDevice //----------------------------------------------------------------------------- namespace nDev = DIOS::Dev; namespace nsDetail = DIOS::Dev::Detail; class DynBoxDevice : public SYNBOXMould { using superGen = SYNBOXMould; public: DynBoxDevice(std::shared_ptr center, nsSCF::SCF SCF); ~DynBoxDevice(); ResDataObject ResDYNConfig; protected: // 由工作流调用 virtual RET_STATUS SetWS(std::string value) override; virtual RET_STATUS SetExpMode(std::string value) override; //设置曝光模式,signalrad或者series 可以通过模式设定决策读取同步盒不同曝光模式下的配置文件 virtual RET_STATUS SetGeneratortoSyncStatus(int state) override; // virtual RET_STATUS SetExpEnable() override; virtual RET_STATUS SetExpDisable() override; virtual RET_STATUS PrepareAcquisition() override; virtual RET_STATUS StartWindowRequest() override; virtual RET_STATUS SetExposureTimes(int nNum) override; virtual RET_STATUS StopWindowRequest() override; virtual RET_STATUS SetFrameRate(FLOAT frameRate) override; virtual RET_STATUS SetGenAECSignal(int signal) override; virtual RET_STATUS SimulateFootSwitchSignal(int signal) override; virtual RET_STATUS SetValue_PPS(FLOAT fluframeRate) override; private: std::unique_ptr m_MSGUnit; private: //int ChartoInt(char uc); //int CalChecksum(const char* cCmd, int nCmdSize); //bool FormatCmd(char* cCmd, int& nSize); //bool CmdtoString(const char* cCmd, int nCmdSize, string& strCmd); RET_STATUS SendBySCF(const char* chChannelID, bool bStatus); RET_STATUS SendSPSBySCF(const char* chChannelID, int nCycle, int nPulse, int nWaitTime); //发送设置PWM参数的指令 频率脉宽 RET_STATUS SendSPEBySCF(const char* chChannelID, UCHAR cMode, UCHAR cEnable, int nWaitTime); //发送使能PWM参数生效的指令(让TIC信号开始发送) RET_STATUS SendSMSBySCF(const char* cExpMode, const char* cExpCount, int nWaitTime); // 发送曝光模式切换的指令 int DealReceiveData(string sCmdID, const char* pData, int Datalen); //处理遮光器指令的 int NotifySignal(const char* name, int state); //根据盒子收到的信号,把状态传递到上层。 int SetSignal(const char* name, int state); // 发送信号给到硬件 void ClearSignal(); //把所有配置在out的指令都按照不生效都下发一遍 int SetPWMState(bool state); //使能pwm参数 int SetPWM(float fpps); //设置pwm参数 int SetAreaType(); //设置曝光模式 int m_nCurrentExpTimes{ 0 }; DYNHeader_t m_DYNMap; bool m_bINEEnable{ false }; int m_nExpTimes{ -1 }; std::string m_strSYNMode; bool m_nInExpState{ false }; DWORD m_wStartEXPTime; bool m_bClear{ false }; nsSCF::SCF m_SCF; std::shared_ptr EventCenter; public: void Register(Dispatch* Dispatch); void OnCallBack(); int DealtheSignal(const char* channel, int state); // 处理信号 //3DDR因手闸连在机架上,所以使用特殊方法模拟收到手闸信号 RET_STATUS SimulateHandSwitchSignal(string channel, int state); // add by lsy 是否由同步盒更新出线状态(X-RAYOUT) bool m_bSynUpdataGenerStatus{ false }; float m_DefaultExpFrameRate; int m_DefaultExpTimes; private: void FireNotify(std::string key, std::string context); // string m_strPreExpMode; bool m_bSendXindowOnMessage{ false }; bool m_bSendXindowOffMessage{ false }; int SetFootSwitchStatus(int signal); //int m_nWindosOnNum{ 0 }; //int m_nWindosOffNum{ 0 }; }; }