123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781 |
- #include "stdafx.h"
- #include "CommonFun.h"
- #include "DynBoxDevice.hpp"
- #include "Helper.JSON.hpp"
- using namespace DIOS::Dev::Detail::SYNBOX;
- namespace nsSYN = DIOS::Dev::Detail::SYNBOX;
- //-----------------------------------------------------------------------------
- // DynBoxDevice
- //-----------------------------------------------------------------------------
- nsSYN::DynBoxDevice::DynBoxDevice(std::shared_ptr <IOEventCenter> center, nsSCF::SCF SCF)
- {
- m_SCF = SCF;
- EventCenter = center;
- m_SynBoxUnit.m_WS.reset(new WORKSTATIONMould(""));
- m_SynBoxUnit.m_CurrentExpNumber.reset(new CUREXPNUMMould(0, 0, 10000, 1));
- m_SynBoxUnit.m_HandSwitchState.reset(new HANDSWITCHMould(0, 0, 10000, 1));
- m_SynBoxUnit.m_GenSynState.reset(new GENSYNSTATEMould(0, 0, 10000, 1));
- m_SynBoxUnit.m_TotalExpNumber.reset(new TOTALEXPNUMMould(0, 0, 10000, 1));
- m_SynBoxUnit.m_DetectorState.reset(new DETECTORSTATUSMould(0, 0, 10000, 1));
- m_SynBoxUnit.m_DetectorWindowState.reset(new XWINDOWSTATUSMould(AttrKey::XWINDOW_OFF, AttrKey::XWINDOW_OFF, AttrKey::XWINDOW_ON, 1));
- m_SynBoxUnit.m_ExpMode.reset(new EXPMODEMould(""));
- m_SynBoxUnit.m_GridStatue.reset(new GRIDSYNSTATEMould(0, 0, 20, 1));
- m_DYNMap.m_MapChannelState["TB"] = 0;
- m_DYNMap.m_MapChannelState["WB"] = 0;
- m_DYNMap.m_MapChannelState["GT"] = 0;
- m_DYNMap.m_MapChannelState["GW"] = 0;
- m_DYNMap.m_MapChannelState["PT"] = 0;
- m_DYNMap.m_MapChannelState["PW"] = 0;
- m_DYNMap.m_MapChannelState["ER"] = 0;
- m_DYNMap.m_MapChannelState["RT"] = 0;
- m_DYNMap.m_MapChannelState["RW"] = 0;
- m_DYNMap.m_MapChannelState["OT"] = 0;
- m_DYNMap.m_MapChannelState["OW"] = 0;
- m_DYNMap.m_MapChannelState["PR"] = 0;
- m_DYNMap.m_MapChannelState["FT"] = 0;
- m_DYNMap.m_MapChannelState["FW"] = 0;
- m_DYNMap.m_MapChannelState["TT"] = 0;
- m_DYNMap.m_MapChannelState["TW"] = 0;
- RefreshSignal();
- }
- nsSYN::DynBoxDevice::~DynBoxDevice()
- {
- }
- void nsSYN::DynBoxDevice::Register(Dispatch* Dispatch)
- {
- superGen::Register(Dispatch);
- }
- RET_STATUS nsSYN::DynBoxDevice::SetWS(std::string value)
- {
- mLog::Info("SetWS");
- if (ResDYNConfig.GetFirstOf(value.c_str()) >= 0)
- {
- m_SynBoxUnit.m_WS->Update(value);
- m_strSYNMode = (string)ResDYNConfig[value.c_str()];
- }
- else
- {
- m_strSYNMode = "SYN0";
- mLog::Info("Syncbox configuration didn't find the workstation {$}, use defualt config SYN0", value.c_str());
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetExpMode(std::string value)
- {
- m_SynBoxUnit.m_ExpMode->Update(value);
- mLog::Info("SetExpMode {$}", value.c_str());
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetGeneratortoSyncStatus(int state)
- {
- string strStateName = "";
- int nstate = -1;
- mLog::Info("SetGeneratortoSyncStatus :{$}", state);
- if (state == AttrKey::GENERATOR_FLU_OFF || state == AttrKey::GENERATOR_RAD_OFF)//如果是采集结束的消息,直接恢复同步盒状态
- {
- ClearSignal();
- }
- if (m_SynBoxUnit.m_GenSynState->Get() != state || state == AttrKey::GENERATOR_RAD_XRAYON || state == AttrKey::GENERATOR_RAD_XRAYOFF)
- {
- mLog::Info("switch :{$}", state);
- switch (state)
- {
- case AttrKey::GENERATOR_RAD_PREPARE:
- m_nCurrentExpTimes = 0;
- strStateName = "HANDSWITCHPREPREQUEST";
- nstate = 1;
- m_nInExpState = true;
- m_wStartEXPTime = GetTickCount();
- break;
- case AttrKey::GENERATOR_RAD_READY:
- m_nCurrentExpTimes = 0;
- strStateName = "HANDSWITCHREADYREQUEST";
- nstate = 1;
- break;
- case AttrKey::GENERATOR_RAD_OFF:
- m_nCurrentExpTimes = 0;
- m_nExpTimes = -1;
- m_nInExpState = false;
- /*strStateName = "HANDSWITCHREADYREQUEST";
- nstate = 0;
- ((DYNSyncBox*)GetDrvDPC())->SetSignal(strStateName.c_str(), state);
- Sleep(30);
- strStateName = "GENEXPREQUEST";
- nstate = 0;
- ((DYNSyncBox*)GetDrvDPC())->SetSignal(strStateName.c_str(), state);
- Sleep(30);
- strStateName = "HANDSWITCHPREPREQUEST";
- nstate = 0;*/
- break;
- case AttrKey::GENERATOR_FLU_READY:
- m_nCurrentExpTimes = 0;
- strStateName = "HANDSWITCHPREPREQUEST";
- nstate = 1;
- SetSignal(strStateName.c_str(), nstate);
- Sleep(30);
- strStateName = "HANDSWITCHREADYREQUEST";
- nstate = 1;
- break;
- case AttrKey::GENERATOR_FLU_OFF:
- m_nCurrentExpTimes = 0;
- m_nExpTimes = -1;
- /*strStateName = "HANDSWITCHREADYREQUEST";
- nstate = 0;
- ((DYNSyncBox*)GetDrvDPC())->SetSignal(strStateName.c_str(), nstate);
- Sleep(30);
- strStateName = "HANDSWITCHPREPREQUEST";*/
- break;
- case AttrKey::GENERATOR_RAD_XRAYON:
- m_bINEEnable = true;
- strStateName = "GENEXPREQUEST";
- nstate = 1;
- break;
- case AttrKey::GENERATOR_RAD_XRAYOFF:
- if (m_SynBoxUnit.m_ExpMode->JSGet() != "ContinueSerial")
- {
- strStateName = "GENEXPREQUEST";
- nstate = 0;
- }
- break;
- default:
- strStateName = "";
- nstate = -1;
- break;
- }
- if (state == AttrKey::GENERATOR_FLU_OFF || state == AttrKey::GENERATOR_RAD_OFF)//如果是采集结束的消息,直接恢复同步盒状态
- {
- if (!m_bClear)
- {
- ClearSignal();
- m_bClear = true;
- }
- m_SynBoxUnit.m_GenSynState->Update(state);
- }
- else if (strStateName != "" && nstate >= 0)
- {
- m_bClear = false;
- SetSignal(strStateName.c_str(), nstate);
- m_SynBoxUnit.m_GenSynState->Update(state);
- }
- }
- else
- {
- mLog::Error("switch :{$}, PreSetGeneratortoSyncStatus=false", state);
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetExpEnable()
- {
- mLog::Info("SetExpEnable");
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetExpDisable()
- {
- mLog::Info("SetExpDisable");
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::PrepareAcquisition()
- {
- mLog::Info("PrepareAcquisition");
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::StartWindowRequest()
- {
- mLog::Info("StartWindowRequest");
- m_bINEEnable = true;
- string strStateName = "DETREACQREQUEST";
- int state = 1;
- SetSignal(strStateName.c_str(), state);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetExposureTimes(int nNum)
- {
- mLog::Info("SetExposureTimes");
- if (m_SynBoxUnit.m_ExpMode->JSGet() != "TOMO")
- {
- m_nExpTimes = nNum;
- }
- else
- {
- m_nExpTimes = 0;
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::StopWindowRequest()
- {
- mLog::Info("StopWindowRequest");
- m_bINEEnable = false;
- string strStateName = "DETREACQREQUEST";
- int state = 0;
- SetSignal(strStateName.c_str(), state);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetFrameRate(FLOAT frameRate)
- {
- mLog::Info("SetFrameRate");
- SetPWM(frameRate);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetGenAECSignal(int signal)
- {
- return RET_STATUS::RET_SUCCEED;
- }
- //-----------------------------------------------------------------------------
- // ProcessCmd
- //-----------------------------------------------------------------------------
- void nsSYN::DynBoxDevice::FireNotify(std::string key, std::string content)
- {
- mLog::Info("Enter FireNotify");
- EventCenter->OnNotify(1, key, content);
- }
- //static bool DecodeFrame(const char* strFrame, int length);
- // 收到硬件的通知, 有包到达
- // 按照设计, 仅当数据有变化时, 才发通知到上层, 因此里面有大量的 if (..) FireNotify (..)
- void nsSYN::DynBoxDevice::OnCallBack()
- {
- mLog::Info("DynBoxDevice::OnCallBack");
- auto HWNotProcess = [](const char* value, int length) -> void
- {
- mLog::Warn(" This commands didn't need to process!");
- };
- auto HWSignal = [this](const char* value, int length) -> void
- {
- assert(value && length>=3);
- char cChannelValue;
- cChannelValue = value[2]; //status : on /off
- string strChannel = ((string)value).substr(0, 2);
- bool bStatus = ChartoInt(cChannelValue);
- DealtheSignal(strChannel.c_str(), bStatus);
- };
- auto HWCAN = [this](const char* value, int length)
- {
- char data_can[MAX_COMMAND_LEN] = { 0 };
- for (int i = 0; i < length; i++)
- {
- if (value[i] == 0x30)
- data_can[i] = 0x0;
- else if (value[i] == 0x61)
- data_can[i] = 0x0a;
- else if (value[i] == 0x64)
- data_can[i] = 0x0d;
- else
- data_can[i] = value[i];
- }
- string strcmd = data_can;
- string sCmdID = strcmd.substr(2, 2);
- DealReceiveData(sCmdID, &data_can[4], length - 4);
- };
- // 有部分前缀是包含关系, 长的包含短的, 例如 KVS 包含了 KV.
- // 因此长的在前面, 短的在后面
- // !!! Device 是个短寿命对象, 而 arFrame 是静态变量 !!!
- // !!! 因此, 在添加到 arFrame 之前, 务必先清零 !!!
- arFrame.clear();
- arFrame.push_back(tFrameMapping("GR", 2, HWCAN));
- arFrame.push_back(tFrameMapping("CR", 2, HWCAN));
- arFrame.push_back(tFrameMapping("TB", 2, HWSignal));
- arFrame.push_back(tFrameMapping("WB", 2, HWSignal));
- arFrame.push_back(tFrameMapping("GT", 2, HWSignal));
- arFrame.push_back(tFrameMapping("GW", 2, HWSignal));
- arFrame.push_back(tFrameMapping("PT", 2, HWSignal));
- arFrame.push_back(tFrameMapping("PW", 2, HWSignal));
- arFrame.push_back(tFrameMapping("ER", 2, HWSignal));
- arFrame.push_back(tFrameMapping("RT", 2, HWSignal));
- arFrame.push_back(tFrameMapping("RW", 2, HWSignal));
- arFrame.push_back(tFrameMapping("OT", 2, HWSignal));
- arFrame.push_back(tFrameMapping("OW", 2, HWSignal));
- arFrame.push_back(tFrameMapping("PR", 2, HWSignal));
- arFrame.push_back(tFrameMapping("FT", 2, HWSignal));
- arFrame.push_back(tFrameMapping("FW", 2, HWSignal));
- arFrame.push_back(tFrameMapping("TT", 2, HWSignal));
- arFrame.push_back(tFrameMapping("TW", 2, HWSignal));
- }
- int nsSYN::DynBoxDevice::DealReceiveData(string sCmdID, const char* pData, int Datalen)
- {
- mLog::Info("DynBoxDevice::DealReceiveData");
- if (strtol(("0x" + sCmdID).c_str(), NULL, 16) == 0x626)
- {
- string strCmd = pData;
- if (strtol(("0x" + strCmd.substr(0, 2)).c_str(), NULL, 16) == 0x14)
- {
- /*bool bUpdateSize = false, bUpdateFilter = false;
- if (strtol(("0x" + strCmd.substr(3, 1)).c_str(), NULL, 16) & 0x01)
- {
- m_nXSize = strtol(("0x" + strCmd.substr(4, 2)).c_str(), NULL, 16) + strtol(("0x" + strCmd.substr(6, 2)).c_str(), NULL, 16) * 256;
- bUpdateSize = true;
- m_nXSize = m_nXSize / 100;
- printf("m_nXSize = {$}", m_nXSize);
- }
- if (strtol(("0x" + strCmd.substr(3, 1)).c_str(), NULL, 16) & 0x02)
- {
- m_nYSize = strtol(("0x" + strCmd.substr(8, 2)).c_str(), NULL, 16) + strtol(("0x" + strCmd.substr(10, 2)).c_str(), NULL, 16) * 256;
- m_nYSize = m_nYSize / 100;
- bUpdateSize = true;
- printf("m_nYSize = {$}", m_nYSize);
- }
- if (strtol(("0x" + strCmd.substr(2, 1)).c_str(), NULL, 16) & 0x04)
- {
- m_nFilter = strtol(("0x" + strCmd.substr(12, 2)).c_str(), NULL, 16) + strtol(("0x" + strCmd.substr(14, 2)).c_str(), NULL, 16) * 256;
- bUpdateFilter = true;
- printf("m_nFilter = {$}", m_nFilter);
- }
- if (bUpdateSize)
- {
- CollimatorLogic::SetCollimatorSize(m_nXSize, m_nYSize);
- }
- if (bUpdateFilter)
- {
- CollimatorLogic::SetCollimatorFilter(m_nFilter);
- }*/
- }
- }
- return 1;
- }
- int nsSYN::DynBoxDevice::DealtheSignal(const char* channel, int state)
- {
- mLog::Info("DynBoxDevice::DealtheSignal:{$}", channel);
- string strchannel = channel;
- m_DYNMap.m_MapChannelState[strchannel] = state;
- if (ResDYNConfig.GetFirstOf(m_strSYNMode.c_str()) < 0)
- {
- mLog::Error("Didn't find SynMode : {$}", m_strSYNMode.c_str());
- return -1;
- }
- if (ResDYNConfig[m_strSYNMode.c_str()].GetFirstOf(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) < 0)
- {
- mLog::Error("Didn't find CurrentExamMode : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
- return -1;
- }
- int count = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"].size();
- string strSignalName = "";
- int nState = -1;
- mLog::Info("CurrentExamMode = {$}, strchannel = {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str(), strchannel.c_str());
- for (int i = 0; i < count; i++)
- {
- string strKey = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"].GetKey(i);
- string confchannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strKey.c_str()]["CHANNEL"];
- mLog::Info("strKey = {$}, confchannel = {$}", strKey.c_str(), confchannel.c_str());
- if (confchannel == strchannel)
- {
- strSignalName = strKey;
- nState = state;
- mLog::Info("Signal Name = {$}", strSignalName.c_str());
- mLog::Info("Signal Name = {$}, state = {$}", strSignalName.c_str(), nState);
- break;
- }
- }
- //当前没有跑到这里调用NotifySignal 需要单步调试一下。看看为什么没进去
- if (strSignalName != "" && nState >= 0)
- {
- //if (strSignalName == "WALLWINDOWSTATUS" || strSignalName == "TABLEWINDOWSTATUS")
- //{
- // strSignalName = "XWINDOWSTATUS";
- //}
- //else if (strSignalName == "GENREADY")
- //{
- // strSignalName = "GENREADY";
- //}
- //else if (strSignalName == "TABLEGRIDSTATUS" || strSignalName == "WALLGRIDSTATUS")
- //{
- //}
- NotifySignal(strSignalName.c_str(), nState);
- string strSetEnableSignal = (string)ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["SETENABLE"];
- string strSetDisableSignal = (string)ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["SETDISABLE"];
- if (nState == 1 && strSetEnableSignal != "")
- {
- string strRelaySignal = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["RELAY"];
- if (strRelaySignal != "")
- {
- string channel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strRelaySignal.c_str()]["CHANNEL"];
- if (nState == m_DYNMap.m_MapChannelState[channel])
- {
- mLog::Info("Set Enable Signal = {$}", strSetEnableSignal.c_str());
- SetSignal(strSetEnableSignal.c_str(), nState);
- }
- }
- else
- {
- mLog::Info("Set Enable Signal = {$}", strSetEnableSignal.c_str());
- SetSignal(strSetEnableSignal.c_str(), nState);
- }
- }
- else if (state == 0 && strSetDisableSignal != "")
- {
- string strRelaySignal = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["RELAY"];
- if (strRelaySignal != "")
- {
- string channel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strRelaySignal.c_str()]["CHANNEL"];
- if (1 == m_DYNMap.m_MapChannelState[channel])
- {
- mLog::Info("Set Disable Signal = {$}", strSetDisableSignal.c_str());
- SetSignal(strSetDisableSignal.c_str(), state);
- }
- }
- else
- {
- mLog::Info("Set Disable Signal = {$}", strSetDisableSignal.c_str());
- SetSignal(strSetDisableSignal.c_str(), state);
- }
- }
- }
- return 2;
- }
- int nsSYN::DynBoxDevice::NotifySignal(const char* name, int state)
- {
- mLog::Info("DynBoxDevice::NotifySignal");
- string strname = name;
- mLog::Info("Send Notify : Name = {$}, State = {$}", name, state);
- if (strname == "HANDSWITCHPREP")
- {
- if (state)
- {
- m_SynBoxUnit.m_HandSwitchState->Update(1);
- FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
- }
- else
- {
- m_SynBoxUnit.m_HandSwitchState->Update(0);
- FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
- }
- }
- else if (strname == "HANDSWITCHREADY")
- {
- if (state)
- {
- m_SynBoxUnit.m_HandSwitchState->Update(2);
- FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
- }
- else
- {
- m_SynBoxUnit.m_HandSwitchState->Update(0);
- FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
- }
- }
- else if (strname == "GENPREP")
- {
- if (state)
- {
- m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_PREPARE);
- FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
- }
- else
- {
- m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_OFF);
- FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
- }
- }
- else if (strname == "GENREADY")
- {
- if (state)
- {
- if (m_bSendRadReady)
- {
- m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_READY);
- FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
- }
- }
- else
- {
- if (m_bSendRadOff)
- {
- m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_OFF);
- FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
- }
- }
- }
- else if (strname == "TABLEWINDOWSTATUS" || strname == "WALLWINDOWSTATUS")
- {
- if (state)
- {
- if (m_bSendXwindowOn)
- {
- m_SynBoxUnit.m_DetectorWindowState->Update(AttrKey::XWINDOW_ON);
- FireNotify(m_SynBoxUnit.m_DetectorWindowState->GetKey(), m_SynBoxUnit.m_DetectorWindowState->JSGet());
- }
- }
- else
- {
- if (m_bSendXwindowOff)
- {
- m_SynBoxUnit.m_DetectorWindowState->Update(AttrKey::XWINDOW_OFF);
- FireNotify(m_SynBoxUnit.m_DetectorWindowState->GetKey(), m_SynBoxUnit.m_DetectorWindowState->JSGet());
- }
- }
- }
- else if (strname == "GENEXPSTATUS")
- {
- if (state)
- {
- if (m_bSendRadXrayOn)
- {
- m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_XRAYON);
- FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
- m_nCurrentExpTimes++;
- }
- }
- else
- {
- if (m_bSendRadXrayOff)
- {
- m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_XRAYOFF);
- FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
- }
- }
- }
- return 2;
- }
- int nsSYN::DynBoxDevice::SetSignal(const char* name, int state)
- {
- mLog::Info("DynBoxDevice::SetSignal");
- string strtemp = name;
- string strName = "";
- std::size_t npos;
- while (npos = strtemp.find_first_of(",") != string::npos)
- {
- strName = strtemp.substr(0, npos);
- npos++;
- strtemp = strtemp.substr(npos, strtemp.size() - npos);
- if (ResDYNConfig.GetFirstOf(m_strSYNMode.c_str()) < 0)
- {
- mLog::Error("Didn't find SynMode : {$}", m_strSYNMode.c_str());
- return -1;
- }
- if (ResDYNConfig[m_strSYNMode.c_str()].GetFirstOf(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) < 0)
- {
- mLog::Error("Set Signal {$}, state {$} ", name, state);
- mLog::Error("Didn't find m_SynBoxUnit.m_ExpMode->JSGet() : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
- return -1;
- }
- string strChannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"][strName.c_str()]["CHANNEL"];
- if (strChannel != "")
- {
- if (strName == "GENEXPREQUEST")
- {
- if (m_bINEEnable)
- {
- //m_nCurrentExpTimes++;
- if (m_nExpTimes > 0 && m_nCurrentExpTimes > m_nExpTimes)
- {
- mLog::Warn("m_nExpTimes has been enough in this sequence! m_nExpTimes={$},m_nCurrentExpTimes={$}", m_nExpTimes, m_nCurrentExpTimes);
- return true;
- }
- }
- else
- {
- mLog::Warn("Generator didn't ready or detector didn't startAcq, So can't send INE to generator!");
- return true;
- }
- }
- mLog::Info("Set Signal {$}, state {$} ", name, state);
- SendBySCF(strChannel.c_str(), state);
- //Sleep(10);
- }
- }
- strName = strtemp;
- if (ResDYNConfig.GetFirstOf(m_strSYNMode.c_str()) < 0)
- {
- mLog::Error("Didn't find SynMode : {$}", m_strSYNMode.c_str());
- return -1;
- }
- if (ResDYNConfig[m_strSYNMode.c_str()].GetFirstOf(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) < 0)
- {
- mLog::Error("Set Signal {$}, state {$} ", name, state);
- mLog::Error("Didn't find CurrentExamMode : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
- return -1;
- }
- string strChannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"][strName.c_str()]["CHANNEL"];
- if (strChannel != "")
- {
- if (strName == "GENEXPREQUEST")
- {
- if (m_bINEEnable)
- {
- //m_nCurrentExpTimes++;
- if (m_nExpTimes > 0 && m_nCurrentExpTimes > m_nExpTimes)
- {
- mLog::Warn("m_nExpTimes has been enough in this sequence! m_nExpTimes={$},m_nCurrentExpTimes={$}", m_nExpTimes, m_nCurrentExpTimes);
- return true;
- }
- }
- else
- {
- mLog::Warn("Generator didn't ready or detector didn't startAcq, So can't send INE to generator!");
- return true;
- }
- }
- mLog::Info("Set Signal {$}, state {$} ", name, state);
- SendBySCF(strChannel.c_str(), state);
- return 1;
- }
- return -1;
- }
- void nsSYN::DynBoxDevice::ClearSignal()
- {
- mLog::Info("DynBoxDevice::ClearSignal");
- if (ResDYNConfig.GetFirstOf(m_strSYNMode.c_str()) < 0)
- {
- mLog::Error("Didn't find SynMode : {$}", m_strSYNMode.c_str());
- return;
- }
- if (ResDYNConfig[m_strSYNMode.c_str()].GetFirstOf(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) < 0)
- {
- mLog::Error("Didn't find CurrentExamMode : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
- return;
- }
- size_t nsize = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"].size();
- for (int i = 0; i < nsize; i++)
- {
- string strChannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"][i]["CHANNEL"];
- string name = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"].GetKey(i);
- mLog::Info("Clear Name :{$},CurrentExamMode ={$}", name.c_str(), m_SynBoxUnit.m_ExpMode->JSGet().c_str());
- if (strChannel != "" && "FRAMERATE" != name)
- {
- mLog::Info("Clear Signal {$} ", strChannel);
- SendBySCF(strChannel.c_str(), false);
- Sleep(10);
- }
- }
- return;
- }
- int nsSYN::DynBoxDevice::SetPWM(float fpps)
- {
- mLog::Info("DynBoxDevice::SetPWM");
- return -1;
- }
- RET_STATUS nsSYN::DynBoxDevice::SendBySCF(const char* chChannelID, bool bStatus)
- {
- mLog::Info("DynBoxDevice::SendBySCF");
- int nTimeout = 100;
- char cCmd[MAX_COMMAND_LEN] = { 0 };
- cCmd[0] = chChannelID[0];
- cCmd[1] = chChannelID[1];
- if (bStatus)
- cCmd[2] = '1';
- else
- cCmd[2] = '0';
- int nSize = 3;
- FormatCmd(cCmd, nSize);
- string strLog;
- CmdtoString(cCmd, nSize, strLog);
- mLog::Info("[Send:{$}]", cCmd);
- if (!m_SCF)
- {
- mLog::Error("SCF is NULL");
- return RET_STATUS::RET_FAILED;
- }
- mLog::Info("==OUT==: {$} ", cCmd);
- int ret = 0;
- m_SCF.Lock(msTimeOut_Lock)
- .SendPacket(cCmd, nSize, nTimeout, ret);
- Sleep(nTimeout);
- return RET_STATUS::RET_SUCCEED;
- }
- void nsSYN::DynBoxDevice::RefreshSignal()
- {
- mLog::Info("Clearing Signal Begin");
- ResetGenExpSignal();
- ResetPanelReqSignal();
- ResetPanelPreSignal();
- mLog::Info("Clearing Signal End");
- }
- void nsSYN::DynBoxDevice::ResetPanelPreSignal(void)
- {
- mLog::Info("DynBoxDevice::ResetPanelPreSignal");
- int nTimeout = 100;
- char cCmd[MAX_COMMAND_LEN] = "RT0";// "SECA00";
- int nCmdSize = 3;// 6;
- FormatCmd(cCmd, nCmdSize);
- string strLog;
- CmdtoString(cCmd, nCmdSize, strLog);
- mLog::Info("[Send:{$}]", strLog.c_str());
- mLog::Info("ResetPanelPreSignal ==OUT==: {$} ", cCmd);
- int ret = 0;
- m_SCF.Lock(msTimeOut_Lock)
- .SendPacket(cCmd, nCmdSize, nTimeout, ret);
- Sleep(nTimeout);
- }
- void nsSYN::DynBoxDevice::ResetPanelReqSignal(void)
- {
- mLog::Info("DynBoxDevice::ResetPanelReqSignal");
- int nTimeout = 100;
- char cCmd[MAX_COMMAND_LEN] = "RW0";// "SECA00";
- int nCmdSize = 3;// 6;
- FormatCmd(cCmd, nCmdSize);
- string strLog;
- CmdtoString(cCmd, nCmdSize, strLog);
- mLog::Info("[Send:{$}]", strLog.c_str());
- mLog::Info("ResetPanelReqSignal ==OUT==: {$} ", cCmd);
- int ret = 0;
- m_SCF.Lock(msTimeOut_Lock)
- .SendPacket(cCmd, nCmdSize, nTimeout, ret);
- Sleep(nTimeout);
- }
- void nsSYN::DynBoxDevice::ResetGenExpSignal(void)
- {
- mLog::Info("DynBoxDevice::ResetGenExpSignal");
- int nTimeout = 100;
- char cCmd[MAX_COMMAND_LEN] = "OT0";
- int nCmdSize = 3;// 6;
- FormatCmd(cCmd, nCmdSize);
- string strLog;
- CmdtoString(cCmd, nCmdSize, strLog);
- mLog::Info("[Send:{$}]", strLog.c_str());
- mLog::Info("ResetGenExpSignal ==OUT==: {$} ", cCmd);
- int ret = 0;
- m_SCF.Lock(msTimeOut_Lock)
- .SendPacket(cCmd, nCmdSize, nTimeout, ret);
- Sleep(nTimeout);
- }
- RET_STATUS nsSYN::DynBoxDevice::SimulateFootSwitchSignal(int signal)
- {
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS nsSYN::DynBoxDevice::SetValue_PPS(FLOAT fluframeRate)
- {
- return RET_STATUS::RET_SUCCEED;
- }
|