GEN.DEV.ContainerExample.cpp 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624
  1. #include "stdafx.h"
  2. #include "GEN.DEV.ContainerExample.h"
  3. namespace nsGEN = CCOS::Dev::Detail::Generator;
  4. #define Example_LoopDefHBTime 1000
  5. //生成命令校验和:cmdData 为 <CMD> [<,> <ARG>]...<,> 其长度要多出3个字符用于存放 STX、CSUM、ETX
  6. char ComputeCheckSum(char* cmdData, int& size)
  7. {
  8. if (size + 3 >= Example_Com_ReSendLen)
  9. {
  10. return 0x00;
  11. }
  12. int AsciiSum = Example_STX + Example_ETX;
  13. char TempCMD[Example_Com_ReSendLen] = { 0 };
  14. TempCMD[0] = Example_STX;
  15. for (int i = 0; i < size; i++) //每字节相加
  16. {
  17. AsciiSum += cmdData[i];
  18. TempCMD[i + 1] = cmdData[i];
  19. }
  20. TempCMD[size + 1] = (char)Example_ETX;
  21. {
  22. TempCMD[size + 2] = (char)AsciiSum;
  23. memcpy(cmdData, TempCMD, size + 4);
  24. size += 3;
  25. //mLog::Debug("ComputeCheckSum:[0x{$:x}]", AsciiSum);
  26. return (char)AsciiSum;
  27. }
  28. return 0xFF;
  29. }
  30. //-----------------------------------------------------------------------------
  31. // CGEN_DEV_ContainerExample
  32. //-----------------------------------------------------------------------------
  33. atomic<int> nsGEN::CGEN_DEV_ContainerExample::m_iLoopTime = Example_LoopDefHBTime;
  34. CcosAttrKey::UNIT_CTRL_TYPE nsGEN::CGEN_DEV_ContainerExample::m_nNotifyType = CcosAttrKey::CTRL_CallBackFun;
  35. nsGEN::CGEN_DEV_ContainerExample::CGEN_DEV_ContainerExample(string configfile)
  36. {
  37. //其余属性初始化
  38. ResDataObject temp;
  39. temp.loadFile(configfile.c_str());
  40. m_GenConfig = temp["CONFIGURATION"];
  41. m_pHardwareStatusThread = NULL;
  42. m_bExpEnable = false;
  43. m_iHeartBeats = 0;
  44. m_bConnectFlag = true;
  45. m_pDevicePath = "UniversalUnit";
  46. //日志方式
  47. string version;
  48. if (GetVersion(version, hMyModule))
  49. mLog::Info("\n===============log begin : version:{$} ===================\n", version.c_str());
  50. else
  51. mLog::Info("\n===============log begin : version:0.0.0.0 ===================\n");
  52. //设置发生器属性集合各个值的范围及精度
  53. //硬件参数
  54. m_TubeInfo.reset(new StringMould(CcosAttrKey::TUBEINFO, "unKnow"));
  55. m_TubeTargetMaterial.reset(new StringMould(CcosAttrKey::TUBETARGETMATERIAL, CcosAttrKey::TYPE::MO));
  56. m_TubeAngle.reset(new IntMould(CcosAttrKey::TUBEANGLE,0.0, -180.0, 180.0, 1.0));
  57. m_TubeHE.reset(new FloatMould(CcosAttrKey::TUBEHEAT, 0.0, 0.0, 100.0, 1.0));
  58. m_GenHE.reset(new FloatMould(CcosAttrKey::DENHEAT, 0.0, 0.0, 100.0, 1.0));
  59. m_BatteryChargeState.reset(new IntMould(CcosAttrKey::BATTERYCHARGESTATE, CcosAttrKey::CHARGE_STATUS_OFF, CcosAttrKey::CHARGE_STATUS_OFF, CcosAttrKey::CHARGE_STATUS_MAX, 1));
  60. m_BatteryPowerState.reset(new IntMould(CcosAttrKey::BATTERYPOWERSTATE, 100, 0, 100, 1));
  61. m_GenSynState.reset(new IntMould(CcosAttrKey::GENHANDSWITCH, CcosAttrKey::GENERATOR_RAD_OFF, CcosAttrKey::GENERATOR_SYNC_ERR, CcosAttrKey::GENERATOR_SYNC_MAX, 1));
  62. m_GenState.reset(new IntMould(CcosAttrKey::GENSTATE, CcosAttrKey::GENERATOR_STATUS_STANDBY, CcosAttrKey::GENERATOR_STATUS_SHUTDOWN, CcosAttrKey::GENERATOR_STATUS_MAX, 1.0));
  63. m_Handswitch.reset(new IntMould(CcosAttrKey::GENHANDSWITCH, CcosAttrKey::HANDSWITCH_STATUS_Release, CcosAttrKey::HANDSWITCH_STATUS_Release, CcosAttrKey::HANDSWITCH_STATUS_MAX, 1.0));
  64. m_Footswitch.reset(new IntMould(CcosAttrKey::GENFOOTSWITCH, CcosAttrKey::FOOTSWITCH_STATUS_Release, CcosAttrKey::FOOTSWITCH_STATUS_Release, CcosAttrKey::FOOTSWITCH_STATUS_MAX, 1.0));
  65. //点片参数
  66. m_RadKV.reset(new FloatMould(CcosAttrKey::RADKV, 40.0, 40.0, 150.0, 1.0)); //接口协议范围:20-49
  67. m_RadMA.reset(new FloatMould(CcosAttrKey::RADMA, 10.0, 10.0, 1000.0, 1.0));
  68. m_RadMS.reset(new FloatMould(CcosAttrKey::RADMS, 1.0, 1.0, 6300, 1.0));
  69. m_RadMAS.reset(new FloatMould(CcosAttrKey::RADMAS, 0.1, 0.1, 1000.0, 1.0));
  70. m_RadTechmode.reset(new IntMould(CcosAttrKey::RADTECHMODE, CcosAttrKey::TECHMODE_NOAEC_2P, CcosAttrKey::TECHMODE_NOAEC_3P, CcosAttrKey::TECHMODE_MAX, 1));
  71. m_RadFocus.reset(new IntMould(CcosAttrKey::RADFOCUS, CcosAttrKey::FOCUS_SMALL, CcosAttrKey::FOCUS_SMALL, CcosAttrKey::FOCUS_MAX, 1));
  72. m_RadAECField.reset(new IntMould(CcosAttrKey::RADAECFIELD, 0, 0, 111, 1));
  73. m_RadAECFilm.reset(new IntMould(CcosAttrKey::RADAECFILM, 0, 0, 2, 1));
  74. m_RadAECDensity.reset(new FloatMould(CcosAttrKey::RADAECDENSITY, 0, -4, 4, 1));
  75. m_RadFrameRate.reset(new IntMould(CcosAttrKey::FRAMERATE, 0, 0, 16, 1));
  76. m_PostKV.reset(new FloatMould(CcosAttrKey::POSTKV, 0.0, 0.0, 50.0, 1.0));
  77. m_PostMA.reset(new FloatMould(CcosAttrKey::POSTMA, 0.0, 0.0, 200.0, 0.1));
  78. m_PostMS.reset(new FloatMould(CcosAttrKey::POSTMS, 0.0, 0.0, 12000.0, 0.01));
  79. m_PostMAS.reset(new FloatMould(CcosAttrKey::POSTMAS, 0.0, 0.0, 600.0, 0.01));
  80. m_ExpMode.reset(new StringMould(CcosAttrKey::EXPMODE, CcosAttrKey::TYPE::Single));
  81. m_EXAMMode.reset(new StringMould(CcosAttrKey::EXAMMODE, CcosAttrKey::TYPE::MANUAL));
  82. //透视参数
  83. m_FluKV.reset(new FloatMould(CcosAttrKey::FLUKV, 40.0, 40.0, 125.0, 1.0));
  84. m_FluMA.reset(new FloatMould(CcosAttrKey::FLUMA, 0.5, 0.5, 20.0, 1.0));
  85. m_FluMS.reset(new FloatMould(CcosAttrKey::FLUMS, 1.0, 1.0, 1000.0, 1.0));
  86. m_FluMAS.reset(new FloatMould(CcosAttrKey::FLUMAS, 0.5, 0.5, 1000.0, 1.0));
  87. m_FluPPS.reset(new IntMould(CcosAttrKey::FLUPPS, 0, 0, 16, 1));
  88. m_FluABSStatus.reset(new IntMould(CcosAttrKey::FLUABSStatus, 0, 0, 4, 1));
  89. m_FluDoseLever.reset(new IntMould(CcosAttrKey::FLUDoseLevel, 0, 0, 10, 1));
  90. m_FluFMode.reset(new IntMould(CcosAttrKey::FLUMode, CcosAttrKey::GENERATOR_FLMODE_NOTFLU, CcosAttrKey::GENERATOR_FLMODE_NOTFLU, CcosAttrKey::GENERATOR_FLMODE_MAX, 1));
  91. m_FluIntTime.reset(new FloatMould(CcosAttrKey::FLUIntTime, 0.0, 0.0, 300000.0, 1.0));
  92. m_FluAccTime.reset(new FloatMould(CcosAttrKey::FLUAccTime, 0.0, 0.0, 300000.0, 1.0));
  93. //发生器告警及错误消息
  94. m_MSGUnit.reset(new nsDetail::MSGUnit(m_pDevicePath));
  95. //读取配置固定值
  96. GetUnitHWValueFromCFG();
  97. m_nCMDType_WaitTime = glo_tDelivermodule.SetPriority(true, false, false, true, 100);
  98. m_nCMDType_HB = glo_tDelivermodule.SetPriority(false, true, false, true, 100);
  99. m_nCMDType_WaitACK = glo_tDelivermodule.SetPriority(true, false, 3, false, 0, true, 1000);
  100. mLog::Info("m_nCMDType_WaitTime[{$}]m_nCMDType_HB[{$}] m_nCMDType_WaitACK[{$}]", m_nCMDType_WaitTime, m_nCMDType_HB, m_nCMDType_WaitACK);
  101. //配置响应操作对照表 供发生器回传的数据触发相应的操作
  102. OnCallBack();
  103. //重置发生器
  104. Reset();
  105. Sleep(500);
  106. //以下进行默认设置,需要注意默认值是否正确
  107. RefreshData(); //刷新初始数值
  108. //启动硬件状态轮询进程
  109. StartHardwareStatusThread();
  110. }
  111. nsGEN::CGEN_DEV_ContainerExample::~CGEN_DEV_ContainerExample()
  112. {
  113. mLog::Info("\n===============log GEN end ===================\n");
  114. if (m_pHardwareStatusThread != NULL)
  115. {
  116. TerminateThread(m_pHardwareStatusThread, 0);
  117. m_pHardwareStatusThread = NULL;
  118. }
  119. glo_arFrame.clear();
  120. }
  121. std::string nsGEN::CGEN_DEV_ContainerExample::GetGUID()
  122. {
  123. mLog::Info("===============GetGUID : {$} ===================\n", GeneratorUnitType);
  124. return GeneratorUnitType;
  125. }
  126. std::string nsGEN::CGEN_DEV_ContainerExample::GetResource()
  127. {
  128. return "";
  129. }
  130. void nsGEN::CGEN_DEV_ContainerExample::GetUnitHWValueFromCFG()
  131. {
  132. //发生器模块消息上报方式
  133. if (m_GenConfig.GetKeyCount("NotifyType") > 0)
  134. {
  135. int data = (int)m_GenConfig["NotifyType"];
  136. m_nNotifyType = (CcosAttrKey::UNIT_CTRL_TYPE)data;
  137. switch (m_nNotifyType)
  138. {
  139. case CcosAttrKey::CTRL_PlatformInterface:
  140. {
  141. mLog::Debug("NotifyType:PlatformInterface");
  142. }break;
  143. case CcosAttrKey::CTRL_Center:
  144. {
  145. mLog::Debug("NotifyType:Center");
  146. m_EventCenter.reset(new IOEventCenter);
  147. }break;
  148. case CcosAttrKey::CTRL_CallBackFun:
  149. {
  150. mLog::Debug("NotifyType:CallBackFun");
  151. }break;
  152. default:
  153. break;
  154. }
  155. }
  156. //同步模式
  157. m_arrWSMap.clear();
  158. if (m_GenConfig.GetKeyCount("WSTable") > 0)
  159. {
  160. int WSNamber = (int)m_GenConfig["WSTable"];
  161. EnSYNMode WSSYN = (EnSYNMode)((int)m_GenConfig["SYNTable"]);
  162. m_arrWSMap[cfgWorkStationKey("Table", CcosAttrKey::TABLE)] = cfgWorkStationData("Table", WSNamber, WSSYN);
  163. mLog::Debug("cfg Table WS[{$}],SYN[{$}]", WSNamber, (int)WSSYN);
  164. }
  165. if (m_GenConfig.GetKeyCount("WSWall") > 0)
  166. {
  167. int WSNamber = (int)m_GenConfig["WSWall"];
  168. EnSYNMode WSSYN = (EnSYNMode)((int)m_GenConfig["SYNWall"]);
  169. m_arrWSMap[cfgWorkStationKey("Wall", CcosAttrKey::WALL)] = cfgWorkStationData("Wall", WSNamber, WSSYN);
  170. mLog::Debug("cfg Wall WS[{$}],SYN[{$}]", WSNamber, (int)WSSYN);
  171. }
  172. if (m_GenConfig.GetKeyCount("WSFree") > 0)
  173. {
  174. int WSNamber = (int)m_GenConfig["WSFree"];
  175. EnSYNMode WSSYN = (EnSYNMode)((int)m_GenConfig["SYNFree"]);
  176. m_arrWSMap[cfgWorkStationKey("Free", CcosAttrKey::MOBILE)] = cfgWorkStationData("Free", WSNamber, WSSYN);
  177. mLog::Debug("cfg Free WS[{$}],SYN[{$}]", WSNamber, (int)WSSYN);
  178. }
  179. if (m_GenConfig.GetKeyCount("WSTomo") > 0)
  180. {
  181. int WSNamber = (int)m_GenConfig["WSTomo"];
  182. EnSYNMode WSSYN = (EnSYNMode)((int)m_GenConfig["SYNTomo"]);
  183. m_arrWSMap[cfgWorkStationKey("Tomo", CcosAttrKey::TOMO)] = cfgWorkStationData("Tomo", WSNamber, WSSYN);
  184. mLog::Debug("cfg Tomo WS[{$}],SYN[{$}]", WSNamber, (int)WSSYN);
  185. }
  186. if (m_GenConfig.GetKeyCount("WSConventional") > 0)
  187. {
  188. int WSNamber = (int)m_GenConfig["WSConventional"];
  189. EnSYNMode WSSYN = (EnSYNMode)((int)m_GenConfig["SYNConventional"]);
  190. m_arrWSMap[cfgWorkStationKey("Direct", CcosAttrKey::CONVENTIONAL)] = cfgWorkStationData("Direct", WSNamber, WSSYN);
  191. mLog::Debug("cfg Conventional WS[{$}],SYN[{$}]", WSNamber, (int)WSSYN);
  192. }
  193. //球管信息
  194. if (m_GenConfig.GetKeyCount(CcosConfKey::CcosTubeInfo) > 0)
  195. {
  196. string data = m_GenConfig[CcosConfKey::CcosTubeInfo];
  197. m_TubeInfo->Update(data);
  198. FireNotify(m_TubeInfo->GetKey(), m_TubeInfo->JSGet());
  199. }
  200. if (m_GenConfig.GetKeyCount(CcosConfKey::CcosFocusSmall) > 0)
  201. {
  202. float data = (float)m_GenConfig[CcosConfKey::CcosFocusSmall];
  203. m_FocusSmall = data;
  204. }
  205. if (m_GenConfig.GetKeyCount(CcosConfKey::CcosFocusLarge) > 0)
  206. {
  207. float data = (float)m_GenConfig[CcosConfKey::CcosFocusLarge];
  208. m_FocusLarge = data;
  209. }
  210. }
  211. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetWS(const string value) //发生器无此设置
  212. {
  213. mLog::Debug("Enter SetWS {$}", value.c_str());
  214. int tempws = 1;
  215. string strWS = "";
  216. cfgWorkStationKey trWS = cfgWorkStationKey(value.c_str());
  217. if (m_arrWSMap.find(trWS) != m_arrWSMap.end())
  218. {
  219. m_strCurrentWSName = trWS;
  220. tempws = m_arrWSMap[m_strCurrentWSName].nWSNamber;
  221. strWS = m_arrWSMap[m_strCurrentWSName].strWSNAme;
  222. mLog::Debug("Set WS number [{$}][{$}]", strWS.c_str(), tempws);
  223. }
  224. else
  225. {
  226. mLog::Debug("Set WS number default 1");
  227. m_strCurrentWSName = cfgWorkStationKey(1);
  228. }
  229. char temp[50] = { 0 };
  230. sprintf_s(temp, "WS%1d", tempws);
  231. return HWSendWaittimeCMD(temp, strlen(temp));
  232. }
  233. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetExpSYN(EnSYNMode value)
  234. {
  235. mLog::Debug("Enter SetExpSYN {$}", (int)value);
  236. int tempws = 0;
  237. switch (value)
  238. {
  239. case EnSYNMode::EXPOSURE_SYNMODE_HARDWARE_SYNBOX:
  240. case EnSYNMode::EXPOSURE_SYNMODE_DIRCETCONNECT_NOSYNBOX:
  241. case EnSYNMode::EXPOSURE_SYNMODE_SOFTWARE_NOSYNBOX:
  242. default:
  243. break;
  244. }
  245. return RET_STATUS::RET_SUCCEED;
  246. }
  247. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetExpEnable() //发生器无此设置
  248. {
  249. return RET_STATUS::RET_SUCCEED;
  250. }
  251. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetExpDisable() //发生器无此设置
  252. {
  253. return RET_STATUS::RET_SUCCEED;
  254. }
  255. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::Reset()
  256. {
  257. mLog::Debug("Enter Reset");
  258. return RET_STATUS::RET_SUCCEED;
  259. }
  260. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::RefreshData()
  261. {
  262. mLog::Debug("Enter RefreshData");
  263. return RET_STATUS::RET_SUCCEED;
  264. }RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetGenSynState(int value) //发生器无此设置:AEC二阶段曝光使用
  265. {
  266. mLog::Debug("Enter SetGenSynState[{$}]->[{$}]", m_GenSynState->Get(), value);
  267. switch (value)
  268. {
  269. case CcosAttrKey::GENERATOR_RAD_OFF:
  270. {}break;
  271. case CcosAttrKey::GENERATOR_RAD_PREPARE:
  272. {}break;
  273. case CcosAttrKey::GENERATOR_RAD_READY:
  274. {}break;
  275. case CcosAttrKey::GENERATOR_RAD_XRAYON:
  276. {}break;
  277. case CcosAttrKey::GENERATOR_RAD_XRAYOFF:
  278. {}break;
  279. case CcosAttrKey::GENERATOR_FLU_OFF:
  280. {}break;
  281. case CcosAttrKey::GENERATOR_FLU_READY:
  282. {}break;
  283. case CcosAttrKey::GENERATOR_FLU_XRAYON:
  284. {}break;
  285. case CcosAttrKey::GENERATOR_FLU_XRAYOFF:
  286. {}break;
  287. default:
  288. break;
  289. }
  290. if (m_GenSynState->Update(value))
  291. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  292. return RET_STATUS::RET_SUCCEED;
  293. }
  294. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetGenState(int value) //发生器无此设置
  295. {
  296. mLog::Debug("Enter SetGenSynState[{$}]->[{$}]", m_GenState->Get(), value);
  297. switch (value)
  298. {
  299. case CcosAttrKey::GENERATOR_STATUS_SHUTDOWN:
  300. {}break;
  301. case CcosAttrKey::GENERATOR_STATUS_INIT:
  302. {}break;
  303. case CcosAttrKey::GENERATOR_STATUS_SLEEP:
  304. {}break;
  305. case CcosAttrKey::GENERATOR_STATUS_CHARGING:
  306. {}break;
  307. case CcosAttrKey::GENERATOR_STATUS_STANDBY:
  308. {}break;
  309. case CcosAttrKey::GENERATOR_STATUS_EXP:
  310. {}break;
  311. case CcosAttrKey::GENERATOR_STATUS_ERROR:
  312. {}break;
  313. default:
  314. break;
  315. }
  316. if (m_GenState->Update(value))
  317. FireNotify(m_GenState->GetKey(), m_GenState->JSGet());
  318. return RET_STATUS::RET_SUCCEED;
  319. }
  320. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::Clear_DAP()
  321. {
  322. return RET_STATUS::RET_SUCCEED;
  323. }
  324. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::GetValue_DAP(float& value)
  325. {
  326. return RET_STATUS::RET_SUCCEED;
  327. }
  328. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetDetectorWindow(bool value)
  329. {
  330. return RET_STATUS::RET_SUCCEED;
  331. }
  332. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetExposurePermit(bool value)
  333. {
  334. return RET_STATUS::RET_SUCCEED;
  335. }
  336. void nsGEN::CGEN_DEV_ContainerExample::SetNotifyCallBack(callBackFun fun)
  337. {
  338. m_funV2DynamicCallBackFun = fun;
  339. }
  340. //发生器支持的通用点片命令
  341. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncRadKV()
  342. {
  343. if (!m_RadKV->CanInc()) return RET_STATUS::RET_FAILED;
  344. return RET_STATUS::RET_SUCCEED;
  345. }
  346. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecRadKV()
  347. {
  348. if (!m_RadKV->CanDec()) return RET_STATUS::RET_FAILED;
  349. return RET_STATUS::RET_SUCCEED;
  350. }
  351. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetRadKV(float value)
  352. {
  353. if (!m_RadKV->Verify(value)) return RET_STATUS::RET_FAILED;
  354. return RET_STATUS::RET_SUCCEED;
  355. }
  356. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncRadMA()
  357. {
  358. if (!m_RadMA->CanInc()) return RET_STATUS::RET_FAILED;
  359. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P ||
  360. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_2P)
  361. {
  362. mLog::Info("Techmode is 2Point, Cannot inc MA \n");
  363. return RET_STATUS::RET_FAILED;
  364. }
  365. return RET_STATUS::RET_SUCCEED;
  366. }
  367. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecRadMA()
  368. {
  369. if (!m_RadMA->CanDec()) return RET_STATUS::RET_FAILED;
  370. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P ||
  371. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_2P)
  372. {
  373. mLog::Info("Techmode is 2Point, Cannot dec MA \n");
  374. return RET_STATUS::RET_FAILED;
  375. }
  376. return RET_STATUS::RET_SUCCEED;
  377. }
  378. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetRadMA(float value)
  379. {
  380. if (!m_RadMA->Verify(value)) return RET_STATUS::RET_FAILED;
  381. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P ||
  382. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_2P)
  383. {
  384. mLog::Info("Techmode is 2Point, Cannot set MA \n");
  385. return RET_STATUS::RET_FAILED;
  386. }
  387. return RET_STATUS::RET_SUCCEED;
  388. }
  389. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncRadMS()
  390. {
  391. if (!m_RadMS->CanInc()) return RET_STATUS::RET_FAILED;
  392. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P ||
  393. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_2P)
  394. {
  395. mLog::Info("Techmode is 2Point, Cannot inc MS \n");
  396. return RET_STATUS::RET_FAILED;
  397. }
  398. return RET_STATUS::RET_SUCCEED;
  399. }
  400. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecRadMS()
  401. {
  402. if (!m_RadMS->CanDec()) return RET_STATUS::RET_FAILED;
  403. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P ||
  404. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_2P)
  405. {
  406. mLog::Info("Techmode is 2Point, Cannot dec MS \n");
  407. return RET_STATUS::RET_FAILED;
  408. }
  409. return RET_STATUS::RET_SUCCEED;
  410. }
  411. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetRadMS(float value)
  412. {
  413. if (!m_RadMS->Verify(value)) return RET_STATUS::RET_FAILED;
  414. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P ||
  415. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_2P)
  416. {
  417. mLog::Info("Techmode is 2Point, Cannot set MS \n");
  418. return RET_STATUS::RET_FAILED;
  419. }
  420. return RET_STATUS::RET_SUCCEED;
  421. }
  422. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncRadMAS()
  423. {
  424. if (!m_RadMAS->CanInc()) return RET_STATUS::RET_FAILED;
  425. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_3P ||
  426. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_3P)
  427. {
  428. mLog::Info("Techmode is 3Point, Cannot inc MAS \n");
  429. return RET_STATUS::RET_FAILED;
  430. }
  431. return RET_STATUS::RET_SUCCEED;
  432. }
  433. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecRadMAS()
  434. {
  435. if (!m_RadMAS->CanDec()) return RET_STATUS::RET_FAILED;
  436. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_3P ||
  437. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_3P)
  438. {
  439. mLog::Info("Techmode is 3Point, Cannot dec MAS \n");
  440. return RET_STATUS::RET_FAILED;
  441. }
  442. return RET_STATUS::RET_SUCCEED;
  443. }
  444. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetRadMAS(float value)
  445. {
  446. if (!m_RadMAS->Verify(value)) return RET_STATUS::RET_FAILED;
  447. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_3P ||
  448. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_AEC_3P)
  449. {
  450. mLog::Info("Techmode is 3Point, Cannot set MAS \n");
  451. return RET_STATUS::RET_FAILED;
  452. }
  453. return RET_STATUS::RET_SUCCEED;
  454. }
  455. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFocus(int value)
  456. {
  457. if (!m_RadFocus->Verify(value)) return RET_STATUS::RET_FAILED;
  458. return RET_STATUS::RET_SUCCEED;
  459. }
  460. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetTechmode(int value)
  461. {
  462. if (!m_RadTechmode->Verify(value)) return RET_STATUS::RET_FAILED;
  463. return RET_STATUS::RET_SUCCEED;
  464. }
  465. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetAECDensity(int value) //发生器无此设置
  466. {
  467. if (!m_RadAECDensity->Verify(value)) return RET_STATUS::RET_FAILED;
  468. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_3P ||
  469. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P)
  470. {
  471. mLog::Info("Techmode is not AEC, Cannot set Density \n");
  472. return RET_STATUS::RET_FAILED;
  473. }
  474. return RET_STATUS::RET_SUCCEED;
  475. }
  476. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetAECField(int value) //发生器无此设置
  477. {
  478. if (!m_RadAECField->Verify(value)) return RET_STATUS::RET_FAILED;
  479. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_3P ||
  480. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P)
  481. {
  482. mLog::Info("Techmode is not AEC, Cannot set Field \n");
  483. return RET_STATUS::RET_FAILED;
  484. }
  485. return RET_STATUS::RET_SUCCEED;
  486. }
  487. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetAECFilm(int value) //发生器无此设置
  488. {
  489. if (!m_RadAECFilm->Verify(value)) return RET_STATUS::RET_FAILED;
  490. if (m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_3P ||
  491. m_RadTechmode->Get() == CcosAttrKey::TECHMODE_NOAEC_2P)
  492. {
  493. mLog::Info("Techmode is not AEC, Cannot set Film \n");
  494. return RET_STATUS::RET_FAILED;
  495. }
  496. return RET_STATUS::RET_SUCCEED;
  497. }
  498. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetAPR(const _tAPRArgs& t)
  499. {
  500. mLog::Info("APR:WS={$},Focus={$},Techmode={$},KV={$},MA={$},MS={$},MAS={$},AECDensity={$},AECFilm={$},AECField={$}",
  501. t.nWS, t.nFocus, t.nTechmode, t.fKV, t.fMA, t.fMS, t.fMAS, t.nAECDensity, t.nAECFilm, t.nAECField);
  502. int tempws = 1;
  503. if (m_arrWSMap.find(cfgWorkStationKey(t.nWS)) != m_arrWSMap.end())
  504. {
  505. m_strCurrentWSName = cfgWorkStationKey(t.nWS);
  506. tempws = m_arrWSMap[m_strCurrentWSName].nWSNamber;
  507. mLog::Debug("Set WS number {$}", tempws);
  508. }
  509. else
  510. {
  511. mLog::Debug("Set WS number default 1");
  512. m_strCurrentWSName = cfgWorkStationKey(t.nWS);
  513. tempws = t.nWS;
  514. }
  515. if (!m_RadKV->Verify(t.fKV))
  516. {
  517. mLog::Error("SetAPR:KV Out of bounds[{$}] \n", t.fKV);
  518. return RET_STATUS::RET_FAILED;
  519. }
  520. else if (!m_RadMA->Verify(t.fMA) && (t.nTechmode == CcosAttrKey::TECHMODE_NOAEC_3P ||
  521. t.nTechmode == CcosAttrKey::TECHMODE_AEC_3P ||
  522. t.nTechmode == CcosAttrKey::TECHMODE_AEC_ReduceMA ||
  523. t.nTechmode == CcosAttrKey::TECHMODE_NOAEC_MAS_MA ||
  524. t.nTechmode == CcosAttrKey::TECHMODE_AEC_MAS_MA))
  525. {
  526. mLog::Error("SetAPR:MA Out of bounds[{$}] \n", t.fMA);
  527. return RET_STATUS::RET_FAILED;
  528. }
  529. else if (!m_RadMS->Verify(t.fMS) && (t.nTechmode == CcosAttrKey::TECHMODE_NOAEC_3P ||
  530. t.nTechmode == CcosAttrKey::TECHMODE_AEC_3P))
  531. {
  532. mLog::Error("SetAPR:MS Out of bounds[{$}] \n", t.fMS);
  533. return RET_STATUS::RET_FAILED;
  534. }
  535. else if (!m_RadMAS->Verify(t.fMAS) && (t.nTechmode == CcosAttrKey::TECHMODE_NOAEC_2P ||
  536. t.nTechmode == CcosAttrKey::TECHMODE_AEC_2P ||
  537. t.nTechmode == CcosAttrKey::TECHMODE_NOAEC_MAS_MA ||
  538. t.nTechmode == CcosAttrKey::TECHMODE_AEC_MAS_MA))
  539. {
  540. mLog::Error("SetAPR:MAS Out of bounds[{$}] \n", t.fMAS);
  541. return RET_STATUS::RET_FAILED;
  542. }
  543. else if (!m_RadFocus->Verify(t.nFocus))
  544. {
  545. mLog::Error("SetAPR:Focus Out of bounds[{$}] \n", t.nFocus);
  546. return RET_STATUS::RET_FAILED;
  547. }
  548. char temp[50] = { 0 };
  549. switch (t.nTechmode)
  550. {
  551. case CcosAttrKey::TECHMODE_NOAEC_3P:
  552. {}break;
  553. case CcosAttrKey::TECHMODE_NOAEC_2P:
  554. {}break;
  555. case CcosAttrKey::TECHMODE_AEC_3P:
  556. {}break;
  557. case CcosAttrKey::TECHMODE_AEC_2P:
  558. {}break;
  559. case CcosAttrKey::TECHMODE_AEC_1P:
  560. {}break;
  561. case CcosAttrKey::TECHMODE_AEC_ReduceMA:
  562. {}break;
  563. case CcosAttrKey::TECHMODE_NOAEC_MAS_MA:
  564. {}break;
  565. case CcosAttrKey::TECHMODE_AEC_MAS_MA:
  566. {}break;
  567. default:
  568. {}break;
  569. }
  570. return RET_STATUS::RET_SUCCEED;
  571. }
  572. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::QueryPostKV(float& value) //实际为主动上报
  573. {
  574. return RET_STATUS::RET_SUCCEED;
  575. }
  576. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::QueryPostMA(float& value) //实际为主动上报
  577. {
  578. return RET_STATUS::RET_SUCCEED;
  579. }
  580. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::QueryPostMS(float& value) //实际为主动上报
  581. {
  582. return RET_STATUS::RET_SUCCEED;
  583. }
  584. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::QueryPostMAS(float& value) //实际为主动上报
  585. {
  586. return RET_STATUS::RET_SUCCEED;
  587. }
  588. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetRadFrameRate(FLOAT frameRate) //发生器无此动态设置
  589. {
  590. return RET_STATUS::RET_SUCCEED;
  591. }
  592. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetExpMode(std::string value) //发生器无此设置
  593. {
  594. return RET_STATUS::RET_SUCCEED;
  595. }
  596. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetEXAMMode(std::string value) //DMOC实际是通过此接口设置是否启用AEC
  597. {
  598. return RET_STATUS::RET_SUCCEED;
  599. }
  600. //发生器支持的通用透视命令
  601. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncFluKV()
  602. {
  603. if (!m_FluKV->CanInc()) return RET_STATUS::RET_FAILED;
  604. return RET_STATUS::RET_SUCCEED;
  605. }
  606. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecFluKV()
  607. {
  608. if (!m_FluKV->CanDec()) return RET_STATUS::RET_FAILED;
  609. return RET_STATUS::RET_SUCCEED;
  610. }
  611. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluKV(float value)
  612. {
  613. if (!m_FluKV->Verify(value)) return RET_STATUS::RET_FAILED;
  614. return RET_STATUS::RET_SUCCEED;
  615. }
  616. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncFluMA()
  617. {
  618. if (!m_FluMA->CanInc()) return RET_STATUS::RET_FAILED;
  619. return RET_STATUS::RET_SUCCEED;
  620. }
  621. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecFluMA()
  622. {
  623. if (!m_FluMA->CanDec()) return RET_STATUS::RET_FAILED;
  624. return RET_STATUS::RET_SUCCEED;
  625. }
  626. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluMA(float value)
  627. {
  628. if (!m_FluMA->Verify(value)) return RET_STATUS::RET_FAILED;
  629. return RET_STATUS::RET_SUCCEED;
  630. }
  631. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncFluMS()
  632. {
  633. if (!m_FluMS->CanInc()) return RET_STATUS::RET_FAILED;
  634. return RET_STATUS::RET_SUCCEED;
  635. }
  636. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecFluMS()
  637. {
  638. if (!m_FluMS->CanDec()) return RET_STATUS::RET_FAILED;
  639. return RET_STATUS::RET_SUCCEED;
  640. }
  641. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluMS(float value)
  642. {
  643. if (!m_FluMS->Verify(value)) return RET_STATUS::RET_FAILED;
  644. return RET_STATUS::RET_SUCCEED;
  645. }
  646. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncFluMAS()
  647. {
  648. if (!m_FluMAS->CanInc()) return RET_STATUS::RET_FAILED;
  649. return RET_STATUS::RET_SUCCEED;
  650. }
  651. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecFluMAS()
  652. {
  653. if (!m_FluMAS->CanDec()) return RET_STATUS::RET_FAILED;
  654. return RET_STATUS::RET_SUCCEED;
  655. }
  656. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluMAS(float value)
  657. {
  658. if (!m_FluMAS->Verify(value)) return RET_STATUS::RET_FAILED;
  659. return RET_STATUS::RET_SUCCEED;
  660. }
  661. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetPPS(float frameRate)
  662. {
  663. if (!m_FluPPS->CanDec()) return RET_STATUS::RET_FAILED;
  664. return RET_STATUS::RET_SUCCEED;
  665. }
  666. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::GetPPS()
  667. {
  668. return RET_STATUS::RET_SUCCEED;
  669. }
  670. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::INCPPS()
  671. {
  672. return RET_STATUS::RET_SUCCEED;
  673. }
  674. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DECPPS()
  675. {
  676. return RET_STATUS::RET_SUCCEED;
  677. }
  678. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetPluseWidth(float fplusewidth)
  679. {
  680. if (!m_FluMS->Verify(fplusewidth)) return RET_STATUS::RET_FAILED;
  681. return RET_STATUS::RET_SUCCEED;
  682. }
  683. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetABSMode(int nMode)
  684. {
  685. if (!m_FluABSStatus->Verify(nMode)) return RET_STATUS::RET_FAILED;
  686. return RET_STATUS::RET_SUCCEED;
  687. }
  688. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetABSCurve()
  689. {
  690. return RET_STATUS::RET_SUCCEED;
  691. }
  692. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::IncABSCurve()
  693. {
  694. return RET_STATUS::RET_SUCCEED;
  695. }
  696. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DecABSCurve()
  697. {
  698. return RET_STATUS::RET_SUCCEED;
  699. }
  700. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetABSValue(float fABSValue)
  701. {
  702. return RET_STATUS::RET_SUCCEED;
  703. }
  704. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetABSTargetEXI(float fEXIValue)
  705. {
  706. return RET_STATUS::RET_SUCCEED;
  707. }
  708. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetAPF(const _tAPFArgs& t)
  709. {
  710. mLog::Info("APF:WS={$},FluMode={$},ABSMode={$},DoseLever={$},KV={$},MA={$},PPS={$}",
  711. t.nWS, t.nFluMode, t.nABSMode, t.nDoseLever, t.nFLKV, t.fFLMA, t.nPPS);
  712. int tempws = 1;
  713. if (m_arrWSMap.find(cfgWorkStationKey(t.nWS)) != m_arrWSMap.end())
  714. {
  715. m_strCurrentWSName = cfgWorkStationKey(t.nWS);
  716. tempws = m_arrWSMap[m_strCurrentWSName].nWSNamber;
  717. mLog::Debug("Set WS number {$}", tempws);
  718. }
  719. else
  720. {
  721. mLog::Debug("Set WS number default 1");
  722. m_strCurrentWSName = cfgWorkStationKey(t.nWS);
  723. tempws = t.nWS;
  724. }
  725. if (!m_RadKV->Verify(t.nFLKV))
  726. {
  727. mLog::Error("SetAPR:KV Out of bounds[{$}] \n", t.nFLKV);
  728. return RET_STATUS::RET_FAILED;
  729. }
  730. else if (!m_RadMA->Verify(t.fFLMA))
  731. {
  732. mLog::Error("SetAPR:MA Out of bounds[{$}] \n", t.fFLMA);
  733. return RET_STATUS::RET_FAILED;
  734. }
  735. else if (!m_FluPPS->Verify(t.nPPS) && (t.nFluMode == CcosAttrKey::GENERATOR_FLMODE_PF ||
  736. t.nFluMode == CcosAttrKey::GENERATOR_FLMODE_HPF))
  737. {
  738. mLog::Error("SetAPR:PPS Out of bounds[{$}] \n", t.nPPS);
  739. return RET_STATUS::RET_FAILED;
  740. }
  741. else if (!m_FluDoseLever->Verify(t.nDoseLever))
  742. {
  743. mLog::Error("SetAPR:DoseLever Out of bounds[{$}] \n", t.nDoseLever);
  744. return RET_STATUS::RET_FAILED;
  745. }
  746. char temp[50] = { 0 };
  747. switch (t.nFluMode)
  748. {
  749. case CcosAttrKey::GENERATOR_FLMODE_NOTFLU:
  750. {}break;
  751. case CcosAttrKey::GENERATOR_FLMODE_CF:
  752. {}break;
  753. case CcosAttrKey::GENERATOR_FLMODE_PF:
  754. {}break;
  755. case CcosAttrKey::GENERATOR_FLMODE_HCF:
  756. {}break;
  757. case CcosAttrKey::GENERATOR_FLMODE_HPF:
  758. {}break;
  759. default:
  760. {}break;
  761. }
  762. return RET_STATUS::RET_SUCCEED;
  763. }
  764. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::GetFluIntTimer()
  765. {
  766. return RET_STATUS::RET_SUCCEED;
  767. }
  768. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::GetFluAccTimer()
  769. {
  770. return RET_STATUS::RET_SUCCEED;
  771. }
  772. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::ResetFluTimer(int ntype)
  773. {
  774. return RET_STATUS::RET_SUCCEED;
  775. }
  776. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluPre(int bPrepare)
  777. {
  778. return RET_STATUS::RET_SUCCEED;
  779. }
  780. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluEXP(int bPrepare)
  781. {
  782. return RET_STATUS::RET_SUCCEED;
  783. }
  784. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluMode(std::string value)
  785. {
  786. return RET_STATUS::RET_SUCCEED;
  787. }
  788. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluMAG(int nsize)
  789. {
  790. return RET_STATUS::RET_SUCCEED;
  791. }
  792. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::DisableMAG()
  793. {
  794. return RET_STATUS::RET_SUCCEED;
  795. }
  796. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetFluDoseLever(int nlever)
  797. {
  798. if (!m_FluDoseLever->Verify(nlever)) return RET_STATUS::RET_FAILED;
  799. return RET_STATUS::RET_SUCCEED;
  800. }
  801. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::SetHalfDose(int nlever)
  802. {
  803. return RET_STATUS::RET_SUCCEED;
  804. }
  805. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::TransferRadCurve(int ncurve)
  806. {
  807. return RET_STATUS::RET_SUCCEED;
  808. }
  809. //-----------------------------------------------------------------------------
  810. // ProcessCmd
  811. //-----------------------------------------------------------------------------
  812. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::HWSendWaittimeCMD(char* strCommand, int lengh, int headLengh)
  813. {
  814. return glo_tDelivermodule.ProcessCommand(strCommand, lengh, m_nCMDType_WaitTime, headLengh);
  815. }
  816. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::HWSendHBCMD(char* strCommand, int lengh, int headLengh)
  817. {
  818. return glo_tDelivermodule.ProcessCommand(strCommand, lengh, m_nCMDType_HB, headLengh);
  819. }
  820. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::HWSendWaitACKCMD(char* strCommand, int lengh, int headLengh)
  821. {
  822. return glo_tDelivermodule.ProcessCommand(strCommand, lengh, m_nCMDType_WaitACK, headLengh);
  823. }
  824. RET_STATUS nsGEN::CGEN_DEV_ContainerExample::HWSend(const char* strCommand, int lengh, bool reSend, int nTimeOut)
  825. {
  826. if (!m_bConnectFlag)
  827. {
  828. mLog::Error("==OUT==: not Connect,[{$}] send failed \n", strCommand);
  829. return RET_STATUS::RET_FAILED;
  830. }
  831. char strSendCommand[Example_Com_ReSendLen] = { 0 };
  832. int len = strlen(strCommand);
  833. if (len <= 0)
  834. {
  835. mLog::Error("HWSend: cmd is null\n");
  836. return RET_STATUS::RET_FAILED;
  837. }
  838. else if (lengh <= 0)
  839. {
  840. mLog::Error("HWSend: Expected length too small but cmd[{$}] is not null\n", strCommand);
  841. return RET_STATUS::RET_FAILED;
  842. }
  843. else if (len > lengh)
  844. {
  845. mLog::Error("HWSend: Actual length[{$}] > Expected length[{$}] \n", len, lengh);
  846. return RET_STATUS::RET_FAILED;
  847. }
  848. len = lengh;
  849. ::memcpy(strSendCommand, strCommand, len);
  850. if (ComputeCheckSum(strSendCommand, len) == 0x00)
  851. {
  852. mLog::Warn("HWSend: cmd[{$}] Check Summing failed \n", strCommand);
  853. }
  854. //strSendCommand[0] = Example_STX;
  855. //strSendCommand[len - 1] = Example_ETX;
  856. if (true)
  857. {
  858. char strCommandHead[3] = { 0 };
  859. ::memcpy(strCommandHead, strCommand, 2);
  860. auto find_item = glo_arFrame.find(strCommandHead);
  861. if ((find_item != glo_arFrame.end()) && reSend)
  862. {
  863. mLog::Info("==OUT==: [{$}] wait for ACK \n", strSendCommand);
  864. }
  865. else
  866. {
  867. mLog::Info("==OUT==: [{$}] \n", strSendCommand);
  868. }
  869. }
  870. int retLength;
  871. glo_obCommObj.m_SCF.Lock(msTimeOut_Lock)
  872. .SendPacket(strSendCommand, len, nTimeOut, retLength);
  873. return RET_STATUS::RET_SUCCEED;
  874. }
  875. void nsGEN::CGEN_DEV_ContainerExample::FireNotify(string key, const int context)
  876. {
  877. std::string str = std::format("{:d}", context);
  878. switch (m_nNotifyType)
  879. {
  880. case CcosAttrKey::CTRL_PlatformInterface:
  881. {
  882. PlatformInterface::CCOSNotifyCallBackEntry(PACKET_CMD::PACKET_CMD_UPDATE, key, str, m_pDevicePath);
  883. }break;
  884. case CcosAttrKey::CTRL_Center:
  885. {
  886. if (m_EventCenter != nullptr)
  887. {
  888. m_EventCenter->OnNotify(1, key, str);
  889. }
  890. else
  891. {
  892. mLog::Error("m_EventCenter:[{$}:{$}] is null", key.c_str(), str.c_str());
  893. }
  894. }break;
  895. case CcosAttrKey::CTRL_CallBackFun:
  896. {
  897. if (m_funV2DynamicCallBackFun != NULL)
  898. {
  899. m_funV2DynamicCallBackFun(key, str);
  900. }
  901. else
  902. {
  903. mLog::Error("V2DynamicCallBackFun:[{$}:{$}] is null", key.c_str(), str.c_str());
  904. }
  905. }break;
  906. default:
  907. mLog::Error("FireNotify:unknow[{$}]m_nNotifyType", (int)m_nNotifyType);
  908. break;
  909. }
  910. }
  911. void nsGEN::CGEN_DEV_ContainerExample::FireNotify(string key, const float context)
  912. {
  913. std::string str = std::format("{:.2f}", context);
  914. switch (m_nNotifyType)
  915. {
  916. case CcosAttrKey::CTRL_PlatformInterface:
  917. {
  918. PlatformInterface::CCOSNotifyCallBackEntry(PACKET_CMD::PACKET_CMD_UPDATE, key, str, m_pDevicePath);
  919. }break;
  920. case CcosAttrKey::CTRL_Center:
  921. {
  922. if (m_EventCenter != nullptr)
  923. {
  924. m_EventCenter->OnNotify(1, key, str);
  925. }
  926. else
  927. {
  928. mLog::Error("m_EventCenter:[{$}:{$}] is null", key.c_str(), str.c_str());
  929. }
  930. }break;
  931. case CcosAttrKey::CTRL_CallBackFun:
  932. {
  933. if (m_funV2DynamicCallBackFun != NULL)
  934. {
  935. m_funV2DynamicCallBackFun(key, str);
  936. }
  937. else
  938. {
  939. mLog::Error("V2DynamicCallBackFun:[{$}:{$}] is null", key.c_str(), str.c_str());
  940. }
  941. }break;
  942. default:
  943. mLog::Error("FireNotify:unknow[{$}]m_nNotifyType", (int)m_nNotifyType);
  944. break;
  945. }
  946. }
  947. void nsGEN::CGEN_DEV_ContainerExample::FireNotify(string key, const string context)
  948. {
  949. switch (m_nNotifyType)
  950. {
  951. case CcosAttrKey::CTRL_PlatformInterface:
  952. {
  953. PlatformInterface::CCOSNotifyCallBackEntry(PACKET_CMD::PACKET_CMD_UPDATE, key, context, m_pDevicePath);
  954. }break;
  955. case CcosAttrKey::CTRL_Center:
  956. {
  957. if (m_EventCenter != nullptr)
  958. {
  959. m_EventCenter->OnNotify(1, key, context);
  960. }
  961. else
  962. {
  963. mLog::Error("m_EventCenter:[{$}:{$}] is null", key.c_str(), context.c_str());
  964. }
  965. }break;
  966. case CcosAttrKey::CTRL_CallBackFun:
  967. {
  968. if (m_funV2DynamicCallBackFun != NULL)
  969. {
  970. m_funV2DynamicCallBackFun(key, context);
  971. }
  972. else
  973. {
  974. mLog::Error("V2DynamicCallBackFun:[{$}:{$}] is null", key.c_str(), context.c_str());
  975. }
  976. }break;
  977. default:
  978. mLog::Error("FireNotify:unknow[{$}]m_nNotifyType", (int)m_nNotifyType);
  979. break;
  980. }
  981. }
  982. void nsGEN::CGEN_DEV_ContainerExample::FireErrorMessage(const bool Act, const int Code, const char* ResInfo)
  983. {
  984. string ErrorCode("Example_ERR_");
  985. ErrorCode += std::to_string(Code);
  986. int level = CcosAttrKey::UNIT_REGULATION_LEVEL::REG_ERRO;
  987. if (Act)
  988. {
  989. mLog::Error("add {$}:{$}", ErrorCode.c_str(), ResInfo);
  990. m_MSGUnit->AddErrorMessage(ErrorCode.c_str(), level, ResInfo);
  991. }
  992. else
  993. {
  994. mLog::Error("del {$}:{$}", ErrorCode.c_str(), ResInfo);
  995. m_MSGUnit->DelErrorMessage(ErrorCode.c_str(), level, ResInfo);
  996. }
  997. }
  998. void nsGEN::CGEN_DEV_ContainerExample::FireWarnMessage(const bool Act, const int Code, const char* ResInfo)
  999. {
  1000. string ErrorCode("Example_WAR_");
  1001. ErrorCode += std::to_string(Code);
  1002. int level = CcosAttrKey::UNIT_REGULATION_LEVEL::REG_WARN;
  1003. if (Act)
  1004. {
  1005. mLog::Error("add {$}:{$}", ErrorCode.c_str(), ResInfo);
  1006. m_MSGUnit->AddWarnMessage(ErrorCode.c_str(), level, ResInfo);
  1007. }
  1008. else
  1009. {
  1010. mLog::Error("del {$}:{$}", ErrorCode.c_str(), ResInfo);
  1011. m_MSGUnit->DelWarnMessage(ErrorCode.c_str(), level, ResInfo);
  1012. }
  1013. }
  1014. void nsGEN::CGEN_DEV_ContainerExample::OnCallBack()
  1015. {
  1016. //无 操作
  1017. auto HWNotProcess = [](const char* value, int length) -> void
  1018. {
  1019. mLog::Info("This commands[{$}] didn't need to process", value);
  1020. };
  1021. //校验和错误
  1022. auto HWERROR_1 = [this](char* value, int length) -> void
  1023. {
  1024. char* nextTokenPtr = NULL;
  1025. char* tokenPtr = strtok_s(value, ",", &nextTokenPtr);
  1026. if (tokenPtr != NULL)
  1027. {
  1028. mLog::Error("== HWERROR_1 == : error CheckSum:[{$}]", tokenPtr);
  1029. }
  1030. else
  1031. {
  1032. mLog::Error("== HWERROR_1 == : error CheckSum:no csum");
  1033. }
  1034. };
  1035. //RADIOGRAPHIC COMMANDS
  1036. auto HWRKV = [this](char* value, int length) -> void
  1037. {
  1038. FireNotify(m_RadKV->GetKey(), value);
  1039. };
  1040. auto HWRMA = [this](char* value, int length) -> void
  1041. {
  1042. FireNotify(m_RadMA->GetKey(), value);
  1043. };
  1044. auto HWRMS = [this](char* value, int length) -> void
  1045. {
  1046. FireNotify(m_RadMS->GetKey(), value);
  1047. };
  1048. auto HWRMX = [this](char* value, int length) -> void
  1049. {
  1050. FireNotify(m_RadMAS->GetKey(), value);
  1051. };
  1052. auto HWRET = [this](char* value, int length) -> void
  1053. {
  1054. FireNotify(m_RadTechmode->GetKey(), value);
  1055. };
  1056. auto HWRFO = [this](char* value, int length) -> void
  1057. {
  1058. FireNotify(m_RadFocus->GetKey(), value);
  1059. };
  1060. auto HWRFN = [this](char* value, int length) -> void
  1061. {
  1062. FireNotify(m_RadAECDensity->GetKey(), value);
  1063. };
  1064. auto HWRFI = [this](char* value, int length) -> void
  1065. {
  1066. FireNotify(m_RadAECField->GetKey(), value);
  1067. };
  1068. auto HWRFS = [this](char* value, int length) -> void
  1069. {
  1070. FireNotify(m_RadAECFilm->GetKey(), value);
  1071. };
  1072. auto HWRAP = [this](char* value, int length) -> void
  1073. {
  1074. FireNotify(m_PostMAS->GetKey(), value);
  1075. };
  1076. auto HWRAT = [this](char* value, int length) -> void
  1077. {
  1078. FireNotify(m_PostMS->GetKey(), value);
  1079. };
  1080. auto HWPR = [this](char* value, int length) -> void
  1081. {
  1082. assert(value);
  1083. int data = atoi(value);
  1084. mLog::Debug("Recv Rad PR[{$}]", data);
  1085. switch (data)
  1086. {
  1087. case 0: //RAD Preparation inactive
  1088. {
  1089. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_RAD_OFF))
  1090. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1091. }break;
  1092. case 1: //RAD Preparation active
  1093. {
  1094. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_RAD_PREPARE))
  1095. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1096. }break;
  1097. case 2: //RAD Generator Ready
  1098. {
  1099. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_RAD_READY))
  1100. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1101. }break;
  1102. default:
  1103. {}break;
  1104. }
  1105. };
  1106. auto HWXR = [this](char* value, int length) -> void
  1107. {
  1108. assert(value);
  1109. int data = atoi(value);
  1110. mLog::Debug("Recv Rad XR[{$}]", data);
  1111. switch (data)
  1112. {
  1113. case 0: //RAD Exposure inactive
  1114. {
  1115. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_RAD_XRAYOFF))
  1116. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1117. }break;
  1118. case 1: //RAD Exposure active
  1119. {
  1120. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_RAD_XRAYON))
  1121. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1122. }break;
  1123. default:
  1124. {}break;
  1125. }
  1126. };
  1127. auto HWPS = [this](char* value, int length) -> void
  1128. {
  1129. assert(value);
  1130. int data = atoi(value);
  1131. mLog::Debug("Recv Rad First handswitch[{$}]", data);
  1132. switch (data)
  1133. {
  1134. case 0: //Release First HandSwitch
  1135. {
  1136. if (m_Handswitch->Update(CcosAttrKey::HANDSWITCH_STATUS_Release))
  1137. FireNotify(m_Handswitch->GetKey(), m_Handswitch->JSGet());
  1138. }break;
  1139. case 1: //Hold First handswitch
  1140. {
  1141. if (m_GenSynState->Update(CcosAttrKey::HANDSWITCH_STATUS_Hold))
  1142. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1143. }break;
  1144. default:
  1145. {}break;
  1146. }
  1147. };
  1148. auto HWXS = [this](char* value, int length) -> void
  1149. {
  1150. assert(value);
  1151. int data = atoi(value);
  1152. mLog::Debug("Recv Rad XR[{$}]", data);
  1153. switch (data)
  1154. {
  1155. case 0: //Release Second handswitch
  1156. {
  1157. if (m_Handswitch->Update(CcosAttrKey::HANDSWITCH_STATUS_Release))
  1158. FireNotify(m_Handswitch->GetKey(), m_Handswitch->JSGet());
  1159. }break;
  1160. case 1: //Press Second handswitch
  1161. {
  1162. if (m_GenSynState->Update(CcosAttrKey::FOOTSWITCH_STATUS_Press))
  1163. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1164. }break;
  1165. default:
  1166. {}break;
  1167. }
  1168. };
  1169. auto HWRPS = [this](char* value, int length) -> void
  1170. {
  1171. FireNotify(m_RadFrameRate->GetKey(), value);
  1172. };
  1173. auto HWRMM = [this](char* value, int length) -> void
  1174. {
  1175. FireNotify(m_ExpMode->GetKey(), value);
  1176. };
  1177. //FLUOROSCOPIC COMMANDS
  1178. auto HWFLK = [this](char* value, int length) -> void
  1179. {
  1180. FireNotify(m_FluKV->GetKey(), value);
  1181. };
  1182. auto HWFLM = [this](char* value, int length) -> void
  1183. {
  1184. FireNotify(m_FluMA->GetKey(), value);
  1185. };
  1186. auto HWFLI = [this](char* value, int length) -> void
  1187. {
  1188. FireNotify(m_FluIntTime->GetKey(), value);
  1189. };
  1190. auto HWFLT = [this](char* value, int length) -> void
  1191. {
  1192. FireNotify(m_FluAccTime->GetKey(), value);
  1193. };
  1194. auto HWFLS = [this](char* value, int length) -> void
  1195. {
  1196. FireNotify(m_FluPPS->GetKey(), value);
  1197. };
  1198. auto HWFPW = [this](char* value, int length) -> void
  1199. {
  1200. FireNotify(CcosAttrKey::FLUpulseWidth, value);
  1201. };
  1202. auto HWFLF = [this](char* value, int length) -> void
  1203. {
  1204. assert(value);
  1205. int data = atoi(value);
  1206. mLog::Debug("Recv Fluoroscopy Mode[{$}]", data);
  1207. switch (data)
  1208. {
  1209. case 0: //Fluoro Disabled
  1210. {
  1211. if (m_FluFMode->Update(CcosAttrKey::GENERATOR_FLMODE_NOTFLU))
  1212. FireNotify(m_FluFMode->GetKey(), m_FluFMode->JSGet());
  1213. }break;
  1214. case 1: //Continuous Fluoroscopy
  1215. {
  1216. if (m_FluFMode->Update(CcosAttrKey::GENERATOR_FLMODE_CF))
  1217. FireNotify(m_FluFMode->GetKey(), m_FluFMode->JSGet());
  1218. }break;
  1219. case 2: //Pulsed Fluoroscopy
  1220. {
  1221. if (m_FluFMode->Update(CcosAttrKey::GENERATOR_FLMODE_PF))
  1222. FireNotify(m_FluFMode->GetKey(), m_FluFMode->JSGet());
  1223. }break;
  1224. case 3: //High Level Continuous Fluoroscopy
  1225. {
  1226. if (m_FluFMode->Update(CcosAttrKey::GENERATOR_FLMODE_HCF))
  1227. FireNotify(m_FluFMode->GetKey(), m_FluFMode->JSGet());
  1228. }break;
  1229. case 4: //High Level Pulsed Fluoroscopy
  1230. {
  1231. if (m_FluFMode->Update(CcosAttrKey::GENERATOR_FLMODE_HPF))
  1232. FireNotify(m_FluFMode->GetKey(), m_FluFMode->JSGet());
  1233. }break;
  1234. default:
  1235. {}break;
  1236. }
  1237. };
  1238. auto HWFLP = [this](char* value, int length) -> void
  1239. {
  1240. assert(value);
  1241. int data = atoi(value);
  1242. mLog::Debug("Recv Fluoroscopy Preparation[{$}]", data);
  1243. switch (data)
  1244. {
  1245. case 0: //Fluoroscopy Prep inactive
  1246. {
  1247. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_FLU_OFF))
  1248. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1249. }break;
  1250. case 1: //Fluoroscopy Prep active
  1251. {
  1252. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_FLU_READY))
  1253. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1254. }break;
  1255. case 2: //Boost Fluoroscopy or Cine Prep active
  1256. {
  1257. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_FLU_CINE_READY))
  1258. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1259. }break;
  1260. default:
  1261. {}break;
  1262. }
  1263. };
  1264. auto HWFLX = [this](char* value, int length) -> void
  1265. {
  1266. assert(value);
  1267. int data = atoi(value);
  1268. mLog::Debug("Recv Fluoroscopy Exposure[{$}]", data);
  1269. switch (data)
  1270. {
  1271. case 0: //Fluoroscopy Exposure inactive
  1272. {
  1273. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_FLU_XRAYOFF))
  1274. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1275. }break;
  1276. case 1: //Fluoroscopy Exposure active
  1277. {
  1278. if (m_GenSynState->Update(CcosAttrKey::GENERATOR_FLU_XRAYON))
  1279. FireNotify(m_GenSynState->GetKey(), m_GenSynState->JSGet());
  1280. }break;
  1281. default:
  1282. {}break;
  1283. }
  1284. };
  1285. auto HWFLA = [this](char* value, int length) -> void
  1286. {
  1287. assert(value);
  1288. int data = atoi(value);
  1289. mLog::Debug("Recv Fluoroscopy ABS[{$}]", data);
  1290. switch (data)
  1291. {
  1292. case 0: //ABS inactive
  1293. {
  1294. if (m_FluABSStatus->Update(CcosAttrKey::GENERATOR_ABS_OFF))
  1295. FireNotify(m_FluABSStatus->GetKey(), m_FluABSStatus->JSGet());
  1296. }break;
  1297. case 1: //ABS active (KV only)
  1298. {
  1299. if (m_FluABSStatus->Update(CcosAttrKey::GENERATOR_ABS_ON_KV))
  1300. FireNotify(m_FluABSStatus->GetKey(), m_FluABSStatus->JSGet());
  1301. }break;
  1302. case 2: //ABS active (KV / mA)
  1303. {
  1304. if (m_FluABSStatus->Update(CcosAttrKey::GENERATOR_ABS_ON_KVMA))
  1305. FireNotify(m_FluABSStatus->GetKey(), m_FluABSStatus->JSGet());
  1306. }break;
  1307. default:
  1308. {}break;
  1309. }
  1310. };
  1311. auto HWFLZ = [this](char* value, int length) -> void
  1312. {
  1313. FireNotify(CcosAttrKey::FLUMag, 0);
  1314. };
  1315. auto HWFLR = [this](char* value, int length) -> void
  1316. {
  1317. assert(value);
  1318. int data = atoi(value);
  1319. mLog::Debug("Recv Fluoroscopy Time Reset[{$}]", data);
  1320. switch (data)
  1321. {
  1322. case 0: //Reset Fluoroscopy Interval Timer
  1323. {
  1324. if (m_FluIntTime->Update(data))
  1325. FireNotify(m_FluIntTime->GetKey(), m_FluIntTime->JSGet());
  1326. }break;
  1327. case 1: //Reset Fluoroscopy Accumulative Timer
  1328. {
  1329. if (m_FluAccTime->Update(data))
  1330. FireNotify(m_FluAccTime->GetKey(), m_FluAccTime->JSGet());
  1331. }break;
  1332. default:
  1333. {}break;
  1334. }
  1335. };
  1336. auto HWFLD = [this](char* value, int length) -> void
  1337. {
  1338. assert(value);
  1339. int data = atoi(value);
  1340. mLog::Debug("Recv Fluoroscopy Dose Level[{$}]", data);
  1341. if (m_FluDoseLever->Update(data))
  1342. {
  1343. FireNotify(m_FluDoseLever->GetKey(), data);
  1344. }
  1345. };
  1346. //SYSTEM COMMANDS
  1347. auto HWEWS = [this](char* value, int length) -> void
  1348. {
  1349. assert(value);
  1350. int data = atoi(value);
  1351. mLog::Debug("Recv Work Station[{$}]", data);
  1352. int tempws = 1;
  1353. if (m_arrWSMap.find(cfgWorkStationKey(data)) != m_arrWSMap.end())
  1354. {
  1355. m_strCurrentWSName = cfgWorkStationKey(data);
  1356. tempws = m_arrWSMap[m_strCurrentWSName].nWSNamber;
  1357. mLog::Debug("Set WS number {$}", tempws);
  1358. SetExpSYN(m_arrWSMap[m_strCurrentWSName].nWSSYN);
  1359. }
  1360. else
  1361. {
  1362. mLog::Debug("Set WS number default 1");
  1363. m_strCurrentWSName = cfgWorkStationKey(data);
  1364. }
  1365. FireNotify(CcosAttrKey::WORKSTATION, data);
  1366. };
  1367. auto HWEHE = [this](char* value, int length) -> void
  1368. {
  1369. assert(value);
  1370. int data = atoi(value);
  1371. mLog::Debug("Recv Tube Heat[{$}]", data);
  1372. if (m_TubeHE->Update(0))
  1373. {
  1374. FireNotify(m_TubeHE->GetKey(), data);
  1375. }
  1376. };
  1377. auto HWEHH = [this](char* value, int length) -> void
  1378. {
  1379. assert(value);
  1380. int data = atoi(value);
  1381. mLog::Debug("Recv GEN Heat[{$}]", data);
  1382. if (m_GenHE->Update(data))
  1383. {
  1384. FireNotify(m_GenHE->GetKey(), data);
  1385. }
  1386. };
  1387. auto HWERR = [this](char* value, int length) -> void
  1388. {
  1389. FireErrorMessage(true, 0, "nuknow");
  1390. };
  1391. auto HWEWN = [this](char* value, int length) -> void
  1392. {
  1393. FireWarnMessage(true, 0, "nuknow");
  1394. };
  1395. auto HWEST = [this](char* value, int length) -> void
  1396. {
  1397. assert(value);
  1398. int data = atoi(value);
  1399. mLog::Debug("Recv Generator Status[{$}]", data);
  1400. switch (data)
  1401. {
  1402. case 1: //Initialization Phase
  1403. {
  1404. if (m_GenState->Update(CcosAttrKey::GENERATOR_STATUS_INIT))
  1405. FireNotify(m_GenState->GetKey(), m_GenState->JSGet());
  1406. }break;
  1407. case 2: //Standby Phase
  1408. {
  1409. if (m_GenState->Update(CcosAttrKey::GENERATOR_STATUS_STANDBY))
  1410. FireNotify(m_GenState->GetKey(), m_GenState->JSGet());
  1411. }break;
  1412. case 3: //Rad Preparation (Ready) Phase
  1413. {
  1414. }break;
  1415. case 4: //Rad Exposure (X-ray) Phase
  1416. {
  1417. if (m_GenState->Update(CcosAttrKey::GENERATOR_STATUS_EXP))
  1418. FireNotify(m_GenState->GetKey(), m_GenState->JSGet());
  1419. }break;
  1420. case 5: //Fluoroscopy Exposure Phase
  1421. {
  1422. if (m_GenState->Update(CcosAttrKey::GENERATOR_STATUS_EXP))
  1423. FireNotify(m_GenState->GetKey(), m_GenState->JSGet());
  1424. }break;
  1425. case 6: //Calibration Phase
  1426. {
  1427. }break;
  1428. case 7: //Error Phase
  1429. {
  1430. if (m_GenState->Update(CcosAttrKey::GENERATOR_STATUS_ERROR))
  1431. FireNotify(m_GenState->GetKey(), m_GenState->JSGet());
  1432. }break;
  1433. case 8: //Service Phase
  1434. {
  1435. }break;
  1436. default:
  1437. {}break;
  1438. }
  1439. };
  1440. auto HWEXM = [this](char* value, int length) -> void
  1441. {
  1442. assert(value);
  1443. int data = atoi(value);
  1444. mLog::Debug("Recv Exposure mode[{$}]", data);
  1445. EnSYNMode tempSYN = EnSYNMode::EXPOSURE_SYNMODE_HARDWARE_SYNBOX;
  1446. switch (data)
  1447. {
  1448. case 0:
  1449. tempSYN = EnSYNMode::EXPOSURE_SYNMODE_HARDWARE_SYNBOX;
  1450. break;
  1451. case 1:
  1452. tempSYN = EnSYNMode::EXPOSURE_SYNMODE_SOFTWARE_NOSYNBOX;
  1453. break;
  1454. default:
  1455. break;
  1456. }
  1457. m_bSoftExpPermit = tempSYN;
  1458. };
  1459. //初始化指令对照表
  1460. glo_arFrame.clear();
  1461. //glo_arFrame[""] = tFrameMapItem(HWERROR_1);//命令格式:校验和错误
  1462. //3.1 RADIOGRAPHIC COMMANDS
  1463. glo_arFrame["RKV"] = tFrameMapItem(HWRKV);
  1464. glo_arFrame["RMA"] = tFrameMapItem(HWRMA);
  1465. glo_arFrame["RMS"] = tFrameMapItem(HWRMS);
  1466. glo_arFrame["RMX"] = tFrameMapItem(HWRMX);
  1467. glo_arFrame["RET"] = tFrameMapItem(HWRET);
  1468. glo_arFrame["RFO"] = tFrameMapItem(HWRFO);
  1469. glo_arFrame["RFN"] = tFrameMapItem(HWRFN);
  1470. glo_arFrame["RFI"] = tFrameMapItem(HWRFI);
  1471. glo_arFrame["RFS"] = tFrameMapItem(HWRFS);
  1472. glo_arFrame["RAP"] = tFrameMapItem(HWRAP);
  1473. glo_arFrame["RAT"] = tFrameMapItem(HWRAT);
  1474. glo_arFrame["PR"] = tFrameMapItem(HWPR);
  1475. glo_arFrame["XR"] = tFrameMapItem(HWXR);
  1476. glo_arFrame["PS"] = tFrameMapItem(HWPS);
  1477. glo_arFrame["XS"] = tFrameMapItem(HWXS);
  1478. glo_arFrame["RPS"] = tFrameMapItem(HWRPS);
  1479. glo_arFrame["RMM"] = tFrameMapItem(HWRMM);
  1480. //3.2 FLUOROSCOPIC COMMANDS
  1481. glo_arFrame["FLK"] = tFrameMapItem(HWFLK);
  1482. glo_arFrame["FLM"] = tFrameMapItem(HWFLM);
  1483. glo_arFrame["FLI"] = tFrameMapItem(HWFLI);
  1484. glo_arFrame["FLT"] = tFrameMapItem(HWFLT);
  1485. glo_arFrame["FLS"] = tFrameMapItem(HWFLS);
  1486. glo_arFrame["FPW"] = tFrameMapItem(HWFPW);
  1487. glo_arFrame["FLF"] = tFrameMapItem(HWFLF);
  1488. glo_arFrame["FLP"] = tFrameMapItem(HWFLP);
  1489. glo_arFrame["FLX"] = tFrameMapItem(HWFLX);
  1490. glo_arFrame["FLA"] = tFrameMapItem(HWFLA);
  1491. glo_arFrame["FLZ"] = tFrameMapItem(HWFLZ);
  1492. glo_arFrame["FLR"] = tFrameMapItem(HWFLR);
  1493. glo_arFrame["FLD"] = tFrameMapItem(HWFLD);
  1494. //SYSTEM COMMANDS
  1495. glo_arFrame["EWS"] = tFrameMapItem(HWEWS);
  1496. glo_arFrame["EHE"] = tFrameMapItem(HWEHE);
  1497. glo_arFrame["EHH"] = tFrameMapItem(HWEHH);
  1498. glo_arFrame["ERR"] = tFrameMapItem(HWERR);
  1499. glo_arFrame["EWN"] = tFrameMapItem(HWEWN);
  1500. glo_arFrame["EST"] = tFrameMapItem(HWEST);
  1501. glo_arFrame["EXM"] = tFrameMapItem(HWEXM);
  1502. }
  1503. bool nsGEN::CGEN_DEV_ContainerExample::StartHardwareStatusThread()
  1504. {
  1505. mLog::Info("enter Start HardwareStatus Thread ");
  1506. if (m_pHardwareStatusThread == NULL)
  1507. {
  1508. DWORD m_HardwareStatusID;
  1509. m_pHardwareStatusThread = CreateThread(0, 0, HardwareStatusThread, this, 0, &m_HardwareStatusID);
  1510. if (m_pHardwareStatusThread == NULL)
  1511. {
  1512. mLog::Error("Start HardwareStatus Thread Failed");
  1513. return false;
  1514. }
  1515. }
  1516. return true;
  1517. }
  1518. DWORD nsGEN::CGEN_DEV_ContainerExample::HardwareStatusThread(LPVOID pParam)
  1519. {
  1520. CGEN_DEV_ContainerExample* pCurGen = (CGEN_DEV_ContainerExample*)pParam;
  1521. if (pCurGen == NULL)
  1522. {
  1523. return false;
  1524. }
  1525. mLog::Info("HardwareStatusThread start");
  1526. if ((int)pCurGen->m_GenConfig["loopTime"] >= 0)
  1527. {
  1528. pCurGen->m_iLoopTime = (int)pCurGen->m_GenConfig["loopTime"];
  1529. }
  1530. mLog::Info("loopTime = {$}", pCurGen->m_iLoopTime.load());
  1531. int currtTime = pCurGen->m_iLoopTime;
  1532. while (pCurGen->m_iLoopTime > 0)
  1533. {
  1534. //心跳包统计加1
  1535. pCurGen->m_iHeartBeats++;
  1536. int tempHeartBeat = pCurGen->m_iHeartBeats;
  1537. if (tempHeartBeat > 10) //无返回信息认为连接断开
  1538. {
  1539. pCurGen->m_iHeartBeats = 0;
  1540. mLog::Info("ExampleGEN: lost Connect \n");
  1541. pCurGen->m_bConnectFlag = false;
  1542. continue;
  1543. }
  1544. //发送心跳
  1545. pCurGen->HWSendHBCMD("xxx", 3); //轮询发生器温度信息
  1546. }
  1547. mLog::Info("HardwareStatusThread stop");
  1548. return true;
  1549. }