2000TBoxDevice.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750
  1. #include "stdafx.h"
  2. #include "CommonFun.h"
  3. #include "2000TBoxDevice.hpp"
  4. #include "Helper.JSON.hpp"
  5. using namespace DIOS::Dev::Detail::SYNBOX;
  6. namespace nsSYN = DIOS::Dev::Detail::SYNBOX;
  7. //-----------------------------------------------------------------------------
  8. // DynBoxDevice
  9. //-----------------------------------------------------------------------------
  10. nsSYN::DynBoxDevice::DynBoxDevice(std::shared_ptr <IOEventCenter> center, nsSCF::SCF SCF, string configfile)
  11. {
  12. m_SCF = SCF;
  13. EventCenter = center;
  14. m_SynBoxUnit.m_WS.reset(new WORKSTATIONMould(""));
  15. m_SynBoxUnit.m_CurrentExpNumber.reset(new CUREXPNUMMould(0, 0, 10000, 1));
  16. m_SynBoxUnit.m_HandSwitchState.reset(new HANDSWITCHMould(0, 0, 10000, 1));
  17. m_SynBoxUnit.m_GenSynState.reset(new GENSYNSTATEMould(0, 0, 10000, 1));
  18. m_SynBoxUnit.m_TotalExpNumber.reset(new TOTALEXPNUMMould(0, 0, 10000, 1));
  19. m_SynBoxUnit.m_DetectorState.reset(new DETECTORSTATUSMould(0, 0, 10000, 1));
  20. m_SynBoxUnit.m_DetectorWindowState.reset(new XWINDOWSTATUSMould(AttrKey::XWINDOW_OFF, AttrKey::XWINDOW_OFF, AttrKey::XWINDOW_ON, 1));
  21. m_SynBoxUnit.m_ExpMode.reset(new EXPMODEMould(""));
  22. m_SynBoxUnit.m_GridStatue.reset(new GRIDSYNSTATEMould(0, 0, 20, 1));
  23. m_DYNMap.m_MapChannelState["TB"] = 0;
  24. m_DYNMap.m_MapChannelState["WB"] = 0;
  25. m_DYNMap.m_MapChannelState["GT"] = 0;
  26. m_DYNMap.m_MapChannelState["GW"] = 0;
  27. m_DYNMap.m_MapChannelState["PT"] = 0;
  28. m_DYNMap.m_MapChannelState["PW"] = 0;
  29. m_DYNMap.m_MapChannelState["ER"] = 0;
  30. m_DYNMap.m_MapChannelState["RT"] = 0;
  31. m_DYNMap.m_MapChannelState["RW"] = 0;
  32. m_DYNMap.m_MapChannelState["OT"] = 0;
  33. m_DYNMap.m_MapChannelState["OW"] = 0;
  34. m_DYNMap.m_MapChannelState["PR"] = 0;
  35. m_DYNMap.m_MapChannelState["FT"] = 0;
  36. m_DYNMap.m_MapChannelState["FW"] = 0;
  37. m_DYNMap.m_MapChannelState["TT"] = 0;
  38. m_DYNMap.m_MapChannelState["TW"] = 0;
  39. m_strSYNMode = "SYN0";
  40. try
  41. {
  42. ResDataObject r_config;
  43. if (r_config.loadFile(configfile.c_str()))
  44. {
  45. ResDYNConfig = r_config["CONFIGURATION"]["DeviceConfig"]["Value"];
  46. TransJsonText(ResDYNConfig);
  47. ResDataObject temp;
  48. temp = r_config["CONFIGURATION"];
  49. TransJsonText(temp);
  50. if (temp.GetKeyCount("SendRadOffMsg") > 0)
  51. {
  52. m_bSendRadOff = (int)temp["SendRadOffMsg"];
  53. mLog::FINFO("SendRadOffMsg {$} ", m_bSendRadOff);
  54. }
  55. if (temp.GetKeyCount("SendRadPrepareMsg") > 0)
  56. {
  57. m_bSendRadPrepare = (int)temp["SendRadPrepareMsg"];
  58. mLog::FINFO("SendRadPrepareMsg {$} ", m_bSendRadPrepare);
  59. }
  60. if (temp.GetKeyCount("SendRadReadyMsg") > 0)
  61. {
  62. m_bSendRadReady = (int)temp["SendRadReadyMsg"];
  63. mLog::FINFO("SendRadReadyMsg {$} ", m_bSendRadReady);
  64. }
  65. if (temp.GetKeyCount("SendRadOXrayOnMsg") > 0)
  66. {
  67. m_bSendRadXrayOn = (int)temp["SendRadOXrayOnMsg"];
  68. mLog::FINFO("SendRadOXrayOnMsg {$} ", m_bSendRadXrayOn);
  69. }
  70. if (temp.GetKeyCount("SendRadXrayOffMsg") > 0)
  71. {
  72. m_bSendRadXrayOff = (int)temp["SendRadXrayOffMsg"];
  73. mLog::FINFO("SendRadXrayOffMsg {$} ", m_bSendRadXrayOff);
  74. }
  75. if (temp.GetKeyCount("SendXwindowOnMsg") > 0)
  76. {
  77. m_bSendXwindowOn = (int)temp["SendXwindowOnMsg"];
  78. mLog::FINFO("SendXwindowOnMsg {$} ", m_bSendXwindowOn);
  79. }
  80. if (temp.GetKeyCount("SendXwindowOffMsg") > 0)
  81. {
  82. m_bSendXwindowOff = (int)temp["SendXwindowOffMsg"];
  83. mLog::FINFO("SendXwindowOffMsg {$} ", m_bSendXwindowOff);
  84. }
  85. }
  86. }
  87. catch (const std::exception&)
  88. {
  89. }
  90. }
  91. nsSYN::DynBoxDevice::~DynBoxDevice()
  92. {
  93. }
  94. void nsSYN::DynBoxDevice::Register(Dispatch* Dispatch)
  95. {
  96. superGen::Register(Dispatch);
  97. }
  98. RET_STATUS nsSYN::DynBoxDevice::SetWS(std::string value)
  99. {
  100. mLog::FINFO("SetWS");
  101. if (ResDYNConfig.GetFirstOf(value.c_str()) >= 0)
  102. {
  103. m_SynBoxUnit.m_WS->Update(value);
  104. m_strSYNMode = (string)ResDYNConfig[value.c_str()];
  105. }
  106. else
  107. {
  108. m_strSYNMode = "SYN0";
  109. mLog::FINFO("Syncbox configuration didn't find the workstation {$}, use defualt config SYN0", value.c_str());
  110. }
  111. return RET_STATUS::RET_SUCCEED;
  112. }
  113. RET_STATUS nsSYN::DynBoxDevice::SetExpMode(std::string value)
  114. {
  115. m_SynBoxUnit.m_ExpMode->Update(value);
  116. mLog::FINFO("SetExpMode {$}", value.c_str());
  117. ClearSignal();
  118. return RET_STATUS::RET_FAILED;
  119. }
  120. RET_STATUS nsSYN::DynBoxDevice::SetGeneratortoSyncStatus(int state)
  121. {
  122. string strStateName = "";
  123. int nstate = -1;
  124. mLog::FINFO("SetGeneratortoSyncStatus :{$}", state);
  125. if (state == AttrKey::GENERATOR_FLU_OFF || state == AttrKey::GENERATOR_RAD_OFF)//如果是采集结束的消息,直接恢复同步盒状态
  126. {
  127. ClearSignal();
  128. }
  129. if (m_SynBoxUnit.m_GenSynState->Get() != state || state == AttrKey::GENERATOR_RAD_XRAYON || state == AttrKey::GENERATOR_RAD_XRAYOFF)
  130. {
  131. mLog::FINFO("switch :{$}", state);
  132. switch (state)
  133. {
  134. case AttrKey::GENERATOR_RAD_PREPARE:
  135. m_nCurrentExpTimes = 0;
  136. strStateName = "HANDSWITCHPREPREQUEST";
  137. nstate = 1;
  138. m_nInExpState = true;
  139. m_wStartEXPTime = GetTickCount();
  140. break;
  141. case AttrKey::GENERATOR_RAD_READY:
  142. m_nCurrentExpTimes = 0;
  143. strStateName = "HANDSWITCHREADYREQUEST";
  144. nstate = 1;
  145. break;
  146. case AttrKey::GENERATOR_RAD_OFF:
  147. m_nCurrentExpTimes = 0;
  148. m_nExpTimes = -1;
  149. m_nInExpState = false;
  150. /*strStateName = "HANDSWITCHREADYREQUEST";
  151. nstate = 0;
  152. ((DYNSyncBox*)GetDrvDPC())->SetSignal(strStateName.c_str(), state);
  153. Sleep(30);
  154. strStateName = "GENEXPREQUEST";
  155. nstate = 0;
  156. ((DYNSyncBox*)GetDrvDPC())->SetSignal(strStateName.c_str(), state);
  157. Sleep(30);
  158. strStateName = "HANDSWITCHPREPREQUEST";
  159. nstate = 0;*/
  160. break;
  161. case AttrKey::GENERATOR_FLU_READY:
  162. m_nCurrentExpTimes = 0;
  163. strStateName = "HANDSWITCHPREPREQUEST";
  164. nstate = 1;
  165. SetSignal(strStateName.c_str(), nstate);
  166. Sleep(30);
  167. strStateName = "HANDSWITCHREADYREQUEST";
  168. nstate = 1;
  169. break;
  170. case AttrKey::GENERATOR_FLU_OFF:
  171. m_nCurrentExpTimes = 0;
  172. m_nExpTimes = -1;
  173. /*strStateName = "HANDSWITCHREADYREQUEST";
  174. nstate = 0;
  175. ((DYNSyncBox*)GetDrvDPC())->SetSignal(strStateName.c_str(), nstate);
  176. Sleep(30);
  177. strStateName = "HANDSWITCHPREPREQUEST";*/
  178. break;
  179. case AttrKey::GENERATOR_RAD_XRAYON:
  180. m_bINEEnable = true;
  181. strStateName = "GENEXPREQUEST";
  182. nstate = 1;
  183. break;
  184. case AttrKey::GENERATOR_RAD_XRAYOFF:
  185. if (m_SynBoxUnit.m_ExpMode->JSGet() != "ContinueSerial")
  186. {
  187. strStateName = "GENEXPREQUEST";
  188. nstate = 0;
  189. }
  190. break;
  191. default:
  192. strStateName = "";
  193. nstate = -1;
  194. break;
  195. }
  196. if (state == AttrKey::GENERATOR_FLU_OFF || state == AttrKey::GENERATOR_RAD_OFF)//如果是采集结束的消息,直接恢复同步盒状态
  197. {
  198. if (!m_bClear)
  199. {
  200. ClearSignal();
  201. m_bClear = true;
  202. }
  203. m_SynBoxUnit.m_GenSynState->Update(state);
  204. }
  205. else if (strStateName != "" && nstate >= 0)
  206. {
  207. m_bClear = false;
  208. SetSignal(strStateName.c_str(), nstate);
  209. m_SynBoxUnit.m_GenSynState->Update(state);
  210. }
  211. }
  212. else
  213. {
  214. mLog::FERROR("switch :{$}, PreSetGeneratortoSyncStatus=false", state);
  215. }
  216. return RET_STATUS::RET_SUCCEED;
  217. }
  218. RET_STATUS nsSYN::DynBoxDevice::SetExpEnable()
  219. {
  220. mLog::FINFO("SetExpEnable");
  221. return RET_STATUS::RET_SUCCEED;
  222. }
  223. RET_STATUS nsSYN::DynBoxDevice::SetExpDisable()
  224. {
  225. mLog::FINFO("SetExpDisable");
  226. return RET_STATUS::RET_SUCCEED;
  227. }
  228. RET_STATUS nsSYN::DynBoxDevice::PrepareAcquisition()
  229. {
  230. mLog::FINFO("PrepareAcquisition");
  231. return RET_STATUS::RET_SUCCEED;
  232. }
  233. RET_STATUS nsSYN::DynBoxDevice::StartWindowRequest()
  234. {
  235. mLog::FINFO("StartWindowRequest");
  236. m_bINEEnable = true;
  237. string strStateName = "DETREACQREQUEST";
  238. int state = 1;
  239. SetSignal(strStateName.c_str(), state);
  240. return RET_STATUS::RET_SUCCEED;
  241. }
  242. RET_STATUS nsSYN::DynBoxDevice::SetExposureTimes(int nNum)
  243. {
  244. mLog::FINFO("SetExposureTimes");
  245. if (m_SynBoxUnit.m_ExpMode->JSGet() != "TOMO")
  246. {
  247. m_nExpTimes = nNum;
  248. }
  249. else
  250. {
  251. m_nExpTimes = 0;
  252. }
  253. return RET_STATUS::RET_SUCCEED;
  254. }
  255. RET_STATUS nsSYN::DynBoxDevice::StopWindowRequest()
  256. {
  257. mLog::FINFO("StopWindowRequest");
  258. m_bINEEnable = false;
  259. string strStateName = "DETREACQREQUEST";
  260. int state = 0;
  261. SetSignal(strStateName.c_str(), state);
  262. return RET_STATUS::RET_SUCCEED;
  263. }
  264. RET_STATUS nsSYN::DynBoxDevice::SetFrameRate(FLOAT frameRate)
  265. {
  266. mLog::FINFO("SetFrameRate");
  267. SetPWM(frameRate);
  268. return RET_STATUS::RET_SUCCEED;
  269. }
  270. RET_STATUS nsSYN::DynBoxDevice::SetGenAECSignal(int signal)
  271. {
  272. return RET_STATUS::RET_SUCCEED;
  273. }
  274. //-----------------------------------------------------------------------------
  275. // ProcessCmd
  276. //-----------------------------------------------------------------------------
  277. void nsSYN::DynBoxDevice::FireNotify(std::string key, std::string content)
  278. {
  279. mLog::FINFO("Enter FireNotify");
  280. EventCenter->OnNotify(1, key, content);
  281. }
  282. int nsSYN::DynBoxDevice::DealReceiveData(string sCmdID, const char* pData, int Datalen)
  283. {
  284. mLog::FINFO("DynBoxDevice::DealReceiveData");
  285. if (strtol(("0x" + sCmdID).c_str(), NULL, 16) == 0x626)
  286. {
  287. string strCmd = pData;
  288. if (strtol(("0x" + strCmd.substr(0, 2)).c_str(), NULL, 16) == 0x14)
  289. {
  290. /*bool bUpdateSize = false, bUpdateFilter = false;
  291. if (strtol(("0x" + strCmd.substr(3, 1)).c_str(), NULL, 16) & 0x01)
  292. {
  293. m_nXSize = strtol(("0x" + strCmd.substr(4, 2)).c_str(), NULL, 16) + strtol(("0x" + strCmd.substr(6, 2)).c_str(), NULL, 16) * 256;
  294. bUpdateSize = true;
  295. m_nXSize = m_nXSize / 100;
  296. printf("m_nXSize = {$}", m_nXSize);
  297. }
  298. if (strtol(("0x" + strCmd.substr(3, 1)).c_str(), NULL, 16) & 0x02)
  299. {
  300. m_nYSize = strtol(("0x" + strCmd.substr(8, 2)).c_str(), NULL, 16) + strtol(("0x" + strCmd.substr(10, 2)).c_str(), NULL, 16) * 256;
  301. m_nYSize = m_nYSize / 100;
  302. bUpdateSize = true;
  303. printf("m_nYSize = {$}", m_nYSize);
  304. }
  305. if (strtol(("0x" + strCmd.substr(2, 1)).c_str(), NULL, 16) & 0x04)
  306. {
  307. m_nFilter = strtol(("0x" + strCmd.substr(12, 2)).c_str(), NULL, 16) + strtol(("0x" + strCmd.substr(14, 2)).c_str(), NULL, 16) * 256;
  308. bUpdateFilter = true;
  309. printf("m_nFilter = {$}", m_nFilter);
  310. }
  311. if (bUpdateSize)
  312. {
  313. CollimatorLogic::SetCollimatorSize(m_nXSize, m_nYSize);
  314. }
  315. if (bUpdateFilter)
  316. {
  317. CollimatorLogic::SetCollimatorFilter(m_nFilter);
  318. }*/
  319. }
  320. }
  321. return 1;
  322. }
  323. int nsSYN::DynBoxDevice::DealtheSignal(const char* channel, int state)
  324. {
  325. mLog::FINFO("DynBoxDevice::DealtheSignal:{$}", channel);
  326. string strchannel = channel;
  327. m_DYNMap.m_MapChannelState[strchannel] = state;
  328. if (ResDYNConfig.GetKeyCount(m_strSYNMode.c_str()) <= 0)
  329. {
  330. mLog::FERROR("Didn't find SynMode : {$}", m_strSYNMode.c_str());
  331. return -1;
  332. }
  333. if (ResDYNConfig[m_strSYNMode.c_str()].GetKeyCount(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) <= 0)
  334. {
  335. mLog::FERROR("Didn't find CurrentExamMode : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
  336. return -1;
  337. }
  338. int count = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"].size();
  339. string strSignalName = "";
  340. int nState = -1;
  341. mLog::FINFO("CurrentExamMode = {$}, strchannel = {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str(), strchannel.c_str());
  342. for (int i = 0; i < count; i++)
  343. {
  344. string strKey = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"].GetKey(i);
  345. string confchannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strKey.c_str()]["CHANNEL"];
  346. mLog::FINFO("strKey = {$}, confchannel = {$}", strKey.c_str(), confchannel.c_str());
  347. if (confchannel == strchannel)
  348. {
  349. strSignalName = strKey;
  350. nState = state;
  351. mLog::FINFO("Signal Name = {$}, state = {$}", strSignalName.c_str(), nState);
  352. break;
  353. }
  354. }
  355. //当前没有跑到这里调用NotifySignal 需要单步调试一下。看看为什么没进去
  356. if (strSignalName != "" && nState >= 0)
  357. {
  358. NotifySignal(strSignalName.c_str(), nState);
  359. string strSetEnableSignal = (string)ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["SETENABLE"];
  360. string strSetDisableSignal = (string)ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["SETDISABLE"];
  361. if (nState == 1 && strSetEnableSignal != "")
  362. {
  363. string strRelaySignal = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["RELAY"];
  364. if (strRelaySignal != "")
  365. {
  366. string channel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strRelaySignal.c_str()]["CHANNEL"];
  367. if (nState == m_DYNMap.m_MapChannelState[channel])
  368. {
  369. mLog::FINFO("Set Enable Signal = {$}", strSetEnableSignal.c_str());
  370. SetSignal(strSetEnableSignal.c_str(), nState);
  371. }
  372. }
  373. else
  374. {
  375. mLog::FINFO("Set Enable Signal = {$}", strSetEnableSignal.c_str());
  376. SetSignal(strSetEnableSignal.c_str(), nState);
  377. }
  378. }
  379. else if (state == 0 && strSetDisableSignal != "")
  380. {
  381. string strRelaySignal = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strSignalName.c_str()]["RELAY"];
  382. if (strRelaySignal != "")
  383. {
  384. string channel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["INPUT"][strRelaySignal.c_str()]["CHANNEL"];
  385. if (1 == m_DYNMap.m_MapChannelState[channel])
  386. {
  387. mLog::FINFO("Set Disable Signal = {$}", strSetDisableSignal.c_str());
  388. SetSignal(strSetDisableSignal.c_str(), state);
  389. }
  390. }
  391. else
  392. {
  393. mLog::FINFO("Set Disable Signal = {$}", strSetDisableSignal.c_str());
  394. SetSignal(strSetDisableSignal.c_str(), state);
  395. }
  396. }
  397. }
  398. return 2;
  399. }
  400. int nsSYN::DynBoxDevice::NotifySignal(const char* name, int state)
  401. {
  402. mLog::FINFO("DynBoxDevice::NotifySignal");
  403. string strname = name;
  404. mLog::FINFO("Send Notify : Name = {$}, State = {$}", name, state);
  405. if (strname == "HANDSWITCHPREP")
  406. {
  407. if (state)
  408. {
  409. m_SynBoxUnit.m_HandSwitchState->Update(1);
  410. FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
  411. }
  412. else
  413. {
  414. m_SynBoxUnit.m_HandSwitchState->Update(0);
  415. FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
  416. }
  417. }
  418. else if (strname == "HANDSWITCHREADY")
  419. {
  420. if (state)
  421. {
  422. m_SynBoxUnit.m_HandSwitchState->Update(2);
  423. FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
  424. }
  425. else
  426. {
  427. m_SynBoxUnit.m_HandSwitchState->Update(0);
  428. FireNotify(m_SynBoxUnit.m_HandSwitchState->GetKey(), m_SynBoxUnit.m_HandSwitchState->JSGet());
  429. }
  430. }
  431. else if (strname == "GENPREP")
  432. {
  433. if (state)
  434. {
  435. m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_PREPARE);
  436. FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
  437. }
  438. else
  439. {
  440. m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_OFF);
  441. FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
  442. }
  443. }
  444. else if (strname == "GENREADY")
  445. {
  446. if (state)
  447. {
  448. if (m_bSendRadReady)
  449. {
  450. m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_READY);
  451. FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
  452. }
  453. }
  454. else
  455. {
  456. if (m_bSendRadOff)
  457. {
  458. m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_OFF);
  459. FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
  460. }
  461. }
  462. }
  463. else if (strname == "XWINDOWSTATUS")
  464. {
  465. if (state)
  466. {
  467. //if (m_cfgCurrentWSSYN.strSyncMode == "FULL")
  468. {
  469. if (m_bSendXwindowOn)
  470. {
  471. m_SynBoxUnit.m_DetectorWindowState->Update(AttrKey::XWINDOW_ON);
  472. FireNotify(m_SynBoxUnit.m_DetectorWindowState->GetKey(), m_SynBoxUnit.m_DetectorWindowState->JSGet());
  473. }
  474. }
  475. }
  476. else
  477. {
  478. //if (m_cfgCurrentWSSYN.strSyncMode == "FULL")
  479. {
  480. if (m_bSendXwindowOff)
  481. {
  482. m_SynBoxUnit.m_DetectorWindowState->Update(AttrKey::XWINDOW_OFF);
  483. FireNotify(m_SynBoxUnit.m_DetectorWindowState->GetKey(), m_SynBoxUnit.m_DetectorWindowState->JSGet());
  484. }
  485. }
  486. }
  487. }
  488. else if (strname == "GENEXPSTATUS")
  489. {
  490. if (state)
  491. {
  492. if (m_bSendRadXrayOn)
  493. {
  494. m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_XRAYON);
  495. FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
  496. m_nCurrentExpTimes++;
  497. }
  498. }
  499. else
  500. {
  501. if (m_bSendRadXrayOff)
  502. {
  503. m_SynBoxUnit.m_GenSynState->Update(AttrKey::GENERATOR_RAD_XRAYOFF);
  504. FireNotify(m_SynBoxUnit.m_GenSynState->GetKey(), m_SynBoxUnit.m_GenSynState->JSGet());
  505. }
  506. }
  507. }
  508. return 2;
  509. }
  510. int nsSYN::DynBoxDevice::SetSignal(const char* name, int state)
  511. {
  512. mLog::FINFO("DynBoxDevice::SetSignal");
  513. string strtemp = name;
  514. string strName = "";
  515. std::size_t npos;
  516. while ((npos = strtemp.find_first_of(",")) != string::npos)
  517. {
  518. strName = strtemp.substr(0, npos);
  519. npos++;
  520. strtemp = strtemp.substr(npos, strtemp.size() - npos);
  521. if (ResDYNConfig.GetFirstOf(m_strSYNMode.c_str()) < 0)
  522. {
  523. mLog::FERROR("Didn't find SynMode : {$}", m_strSYNMode.c_str());
  524. return -1;
  525. }
  526. if (ResDYNConfig[m_strSYNMode.c_str()].GetFirstOf(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) < 0)
  527. {
  528. mLog::FERROR("Set Signal {$}, state {$} ", name, state);
  529. mLog::FERROR("Didn't find m_SynBoxUnit.m_ExpMode->JSGet() : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
  530. return -1;
  531. }
  532. string strChannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"][strName.c_str()]["CHANNEL"];
  533. if (strChannel != "")
  534. {
  535. if (strName == "GENEXPREQUEST")
  536. {
  537. if (m_bINEEnable)
  538. {
  539. //m_nCurrentExpTimes++;
  540. if (m_nExpTimes > 0 && m_nCurrentExpTimes > m_nExpTimes)
  541. {
  542. mLog::FWARN("m_nExpTimes has been enough in this sequence! m_nExpTimes={$},m_nCurrentExpTimes={$}", m_nExpTimes, m_nCurrentExpTimes);
  543. return true;
  544. }
  545. }
  546. else
  547. {
  548. mLog::FWARN("Generator didn't ready or detector didn't startAcq, So can't send INE to generator!");
  549. return true;
  550. }
  551. }
  552. mLog::FINFO("Set Signal {$}, state {$} ", name, state);
  553. SendBySCF(strChannel.c_str(), state);
  554. //Sleep(10);
  555. }
  556. }
  557. strName = strtemp;
  558. if (ResDYNConfig[m_strSYNMode.c_str()].GetFirstOf(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) < 0)
  559. {
  560. mLog::FERROR("Set Signal {$}, state {$} ", name, state);
  561. mLog::FERROR("Didn't find CurrentExamMode : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
  562. return -1;
  563. }
  564. string strChannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"][strName.c_str()]["CHANNEL"];
  565. if (strChannel != "")
  566. {
  567. if (strName == "GENEXPREQUEST")
  568. {
  569. if (m_bINEEnable)
  570. {
  571. //m_nCurrentExpTimes++;
  572. if (m_nExpTimes > 0 && m_nCurrentExpTimes > m_nExpTimes)
  573. {
  574. mLog::FWARN("m_nExpTimes has been enough in this sequence! m_nExpTimes={$},m_nCurrentExpTimes={$}", m_nExpTimes, m_nCurrentExpTimes);
  575. return true;
  576. }
  577. }
  578. else
  579. {
  580. mLog::FWARN("Generator didn't ready or detector didn't startAcq, So can't send INE to generator!");
  581. return true;
  582. }
  583. }
  584. mLog::FINFO("Set Signal {$}, state {$} ", name, state);
  585. SendBySCF(strChannel.c_str(), state);
  586. return 1;
  587. }
  588. return -1;
  589. }
  590. void nsSYN::DynBoxDevice::ClearSignal()
  591. {
  592. mLog::FINFO("DynBoxDevice::ClearSignal");
  593. if (ResDYNConfig.GetFirstOf(m_strSYNMode.c_str()) < 0)
  594. {
  595. mLog::FERROR("Didn't find SynMode : {$}", m_strSYNMode.c_str());
  596. return;
  597. }
  598. if (ResDYNConfig[m_strSYNMode.c_str()].GetFirstOf(m_SynBoxUnit.m_ExpMode->JSGet().c_str()) < 0)
  599. {
  600. mLog::FERROR("Didn't find CurrentExamMode : {$}", m_SynBoxUnit.m_ExpMode->JSGet().c_str());
  601. return;
  602. }
  603. size_t nsize = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"].size();
  604. for (int i = 0; i < nsize; i++)
  605. {
  606. string strChannel = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"][i]["CHANNEL"];
  607. string name = ResDYNConfig[m_strSYNMode.c_str()][m_SynBoxUnit.m_ExpMode->JSGet().c_str()]["OUTPUT"].GetKey(i);
  608. mLog::FINFO("Clear Name :{$},CurrentExamMode ={$}", name.c_str(), m_SynBoxUnit.m_ExpMode->JSGet().c_str());
  609. if (strChannel != "")
  610. {
  611. mLog::FINFO("Clear Signal {$} ", strChannel);
  612. SendBySCF(strChannel.c_str(), false);
  613. Sleep(10);
  614. }
  615. }
  616. return;
  617. }
  618. int nsSYN::DynBoxDevice::SetPWM(float fpps)
  619. {
  620. mLog::FINFO("DynBoxDevice::SetPWM");
  621. return -1;
  622. }
  623. RET_STATUS nsSYN::DynBoxDevice::SendBySCF(const char* chChannelID, bool bStatus)
  624. {
  625. mLog::FINFO("DynBoxDevice::SendBySCF");
  626. int nTimeout = 100;
  627. char cCmd[MAX_COMMAND_LEN] = { 0 };
  628. cCmd[0] = chChannelID[0];
  629. cCmd[1] = chChannelID[1];
  630. if (bStatus)
  631. cCmd[2] = '1';
  632. else
  633. cCmd[2] = '0';
  634. int nSize = 3;
  635. FormatCmd(cCmd, nSize);
  636. string strLog;
  637. CmdtoString(cCmd, nSize, strLog);
  638. mLog::FINFO("[Send:{$}]", cCmd);
  639. if (!m_SCF)
  640. {
  641. mLog::FERROR("SCF is NULL");
  642. return RET_STATUS::RET_FAILED;
  643. }
  644. mLog::FINFO("==OUT==: {$} ", cCmd);
  645. int ret = 0;
  646. m_SCF.Lock(msTimeOut_Lock)
  647. .SendPacket(cCmd, nSize, nTimeout, ret);
  648. Sleep(nTimeout);
  649. return RET_STATUS::RET_SUCCEED;
  650. }
  651. void nsSYN::DynBoxDevice::ResetPanelPreSignal(void)
  652. {
  653. mLog::FINFO("DynBoxDevice::ResetPanelPreSignal");
  654. int nTimeout = 100;
  655. char cCmd[MAX_COMMAND_LEN] = "RT0";// "SECA00";
  656. int nCmdSize = 3;// 6;
  657. FormatCmd(cCmd, nCmdSize);
  658. string strLog;
  659. CmdtoString(cCmd, nCmdSize, strLog);
  660. mLog::FINFO("[Send:{$}]", strLog.c_str());
  661. mLog::FINFO("ResetPanelPreSignal ==OUT==: {$} ", cCmd);
  662. int ret = 0;
  663. m_SCF.Lock(msTimeOut_Lock)
  664. .SendPacket(cCmd, nCmdSize, nTimeout, ret);
  665. Sleep(nTimeout);
  666. }
  667. void nsSYN::DynBoxDevice::ResetPanelReqSignal(void)
  668. {
  669. mLog::FINFO("DynBoxDevice::ResetPanelReqSignal");
  670. int nTimeout = 100;
  671. char cCmd[MAX_COMMAND_LEN] = "RW0";// "SECA00";
  672. int nCmdSize = 3;// 6;
  673. FormatCmd(cCmd, nCmdSize);
  674. string strLog;
  675. CmdtoString(cCmd, nCmdSize, strLog);
  676. mLog::FINFO("[Send:{$}]", strLog.c_str());
  677. mLog::FINFO("ResetPanelReqSignal ==OUT==: {$} ", cCmd);
  678. int ret = 0;
  679. m_SCF.Lock(msTimeOut_Lock)
  680. .SendPacket(cCmd, nCmdSize, nTimeout, ret);
  681. Sleep(nTimeout);
  682. }
  683. void nsSYN::DynBoxDevice::ResetGenExpSignal(void)
  684. {
  685. mLog::FINFO("DynBoxDevice::ResetGenExpSignal");
  686. int nTimeout = 100;
  687. char cCmd[MAX_COMMAND_LEN] = "OT0";
  688. int nCmdSize = 3;// 6;
  689. FormatCmd(cCmd, nCmdSize);
  690. string strLog;
  691. CmdtoString(cCmd, nCmdSize, strLog);
  692. mLog::FINFO("[Send:{$}]", strLog.c_str());
  693. mLog::FINFO("ResetGenExpSignal ==OUT==: {$} ", cCmd);
  694. int ret = 0;
  695. m_SCF.Lock(msTimeOut_Lock)
  696. .SendPacket(cCmd, nCmdSize, nTimeout, ret);
  697. Sleep(nTimeout);
  698. }
  699. RET_STATUS nsSYN::DynBoxDevice::ActiveSyncMode(_tSyncModeArgs value)
  700. {
  701. mLog::FINFO("WS{$}, SyncMode{$}, SyncValue{$}", m_cfgCurrentWSSYN.strWS, m_cfgCurrentWSSYN.strSyncMode, m_cfgCurrentWSSYN.strSyncValue);
  702. m_cfgCurrentWSSYN = value;
  703. return RET_STATUS::RET_SUCCEED;
  704. }
  705. RET_STATUS nsSYN::DynBoxDevice::SimulateFootSwitchSignal(int signal)
  706. {
  707. return RET_STATUS::RET_SUCCEED;
  708. }
  709. RET_STATUS nsSYN::DynBoxDevice::SetValue_PPS(FLOAT fluframeRate)
  710. {
  711. return RET_STATUS::RET_SUCCEED;
  712. }