CCOS.Dev.FPD.HaoBo.cpp 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802
  1. #include "FileVersion.hpp"
  2. #include "CCOS.Dev.FPD.HaoBo.h"
  3. #include "common_api.h"
  4. #include "DICOMImageHeadKey.h"
  5. #include "Detector_HaoBo.h"
  6. #include <sys/stat.h>
  7. #include "LogLocalHelper.h"
  8. #include "Log4CPP.h"
  9. namespace nsFPD = CCOS::Dev::Detail::Detector;
  10. static nsFPD::HaoBoDriver gIODriver;
  11. //Log4CPP::Logger* gLogger = nullptr;
  12. extern Detector_HaoBoRF* g_pDetector;
  13. extern const char* g_szMouldPath;
  14. HaoBoDriver* gDriver = nullptr;
  15. extern "C" CCOS::Dev::IODriver * GetIODriver() // ���ؾ�̬���������, �����߲���ɾ�� !
  16. {
  17. return &gIODriver;
  18. }
  19. extern "C" CCOS::Dev::IODriver * CreateIODriver() // �����¶���, �����߱�������ɾ���˶��� !
  20. {
  21. gDriver = new nsFPD::HaoBoDriver();
  22. return gDriver;
  23. }
  24. nsFPD::HaoBoDriver::HaoBoDriver()
  25. {
  26. pObjDev = nullptr;
  27. m_bDriverConnect = false; //ȱʡΪfalse
  28. m_pAttribute.reset(new ResDataObject());
  29. m_pDescription.reset(new ResDataObject());
  30. }
  31. nsFPD::HaoBoDriver::~HaoBoDriver()
  32. {
  33. if (pObjDev != nullptr)
  34. {
  35. delete pObjDev;
  36. pObjDev = nullptr;
  37. }
  38. }
  39. auto nsFPD::HaoBoDriver::CreateDevice(int index)->std::unique_ptr <IODevice>
  40. {
  41. printf("--Driver-- createdevice \r\n");
  42. FINFO("--Driver-- createdevice \n");
  43. pObjDev = new FPDDeviceHaoBo(EventCenter, m_ConfigFileName);
  44. auto Device = std::unique_ptr<IODevice>(new IODevice(pObjDev));
  45. pObjDev->CreateDevice();
  46. pObjDev->Register();
  47. return Device;
  48. }
  49. bool nsFPD::HaoBoDriver::Connect()
  50. {
  51. printf("--Driver-- connect \r\n");
  52. FINFO("--Driver-- connect");
  53. if (pObjDev && g_pDetector && !m_bDriverConnect)
  54. {
  55. pObjDev->Connect();
  56. }
  57. return m_bDriverConnect;
  58. }
  59. void nsFPD::HaoBoDriver::Disconnect()
  60. {
  61. printf("--Driver-- disconnect \r\n");
  62. FINFO("--Driver-- disconnect");
  63. if (pObjDev != nullptr)
  64. {
  65. delete pObjDev;
  66. pObjDev = nullptr;
  67. }
  68. m_bDriverConnect = false;
  69. }
  70. bool nsFPD::HaoBoDriver::isConnected() const
  71. {
  72. return m_bDriverConnect;
  73. }
  74. void nsFPD::HaoBoDriver::Prepare()
  75. {
  76. printf("--Driver-- prepare \r\n");
  77. // ��ʼ����־ϵͳ
  78. std::string strLogPath = GetProcessDirectory() + R"(/Conf/log_config.xml)";
  79. std::string LogHost = "DevHaoBo"; // ȷ��������ȷ��ֵ
  80. std::string moduleName = "FPD.HaoBo";
  81. bool ret = initLogModule(
  82. LogHost, // ��������������־·���е�{host}ռλ����
  83. moduleName, // Ψһģ����
  84. strLogPath, // ��������
  85. true // �Ƿ����������̨����ѡ��
  86. );
  87. if (!ret) {
  88. std::cerr << "Log init failed!" << std::endl;
  89. return;
  90. }
  91. HaoBoSetLocalModuleName(moduleName);
  92. FINFO("--Driver-- Prepare get logger");
  93. }
  94. std::string nsFPD::HaoBoDriver::DriverProbe()
  95. {
  96. printf("--Driver-- DriverProbe \r\n");
  97. FINFO("--Driver-- DriverProbe");
  98. ResDataObject r_config, HardwareInfo;
  99. if (r_config.loadFile(m_ConfigFileName.c_str()))
  100. {
  101. HardwareInfo.add("MajorID", r_config["CONFIGURATION"]["MajorID"]);
  102. HardwareInfo.add("MinorID", r_config["CONFIGURATION"]["MinorID"]);
  103. HardwareInfo.add("VendorID", r_config["CONFIGURATION"]["VendorID"]);
  104. HardwareInfo.add("ProductID", r_config["CONFIGURATION"]["ProductID"]);
  105. HardwareInfo.add("SerialID", r_config["CONFIGURATION"]["SerialID"]);
  106. }
  107. else
  108. {
  109. HardwareInfo.add("MajorID", "Detector");
  110. HardwareInfo.add("MinorID", "RF");
  111. HardwareInfo.add("VendorID", "HaoBo");
  112. HardwareInfo.add("ProductID", "HaoBo");
  113. HardwareInfo.add("SerialID", "Driver");
  114. }
  115. string str = HardwareInfo.encode();
  116. return str;
  117. }
  118. /***
  119. ** ��ȡID������
  120. ***/
  121. std::string nsFPD::HaoBoDriver::GetResource()
  122. {
  123. printf("--Driver-- GetResource \r\n");
  124. FINFO("--Driver-- GetResource");
  125. ResDataObject r_config, temp;
  126. if (!temp.loadFile(m_ConfigFileName.c_str()))
  127. {
  128. FERROR("load file error! file name:{$}",m_ConfigFileName.c_str());
  129. return "";
  130. }
  131. m_ConfigAll = temp;
  132. r_config = temp["CONFIGURATION"];
  133. m_Configurations = r_config;
  134. ResDataObject DescriptionTemp;
  135. ResDataObject ListTemp;
  136. string strTemp = ""; //���ڶ�ȡ�ַ���������Ϣ
  137. string strIndex = ""; //���ڶ�ȡ������Ϣ�е�List��
  138. int nTemp = -1; //���ڶ�ȡ����������Ϣ
  139. char sstream[10] = { 0 }; //����ת��ֵ
  140. string strValue = ""; //���ڴ洢���õ�ֵ
  141. string strType = ""; //���ڴ洢���õ����� int/float/string...
  142. /***
  143. * 1. ͨ��ѭ����������������д��pDeviceConfig
  144. * 2. ��¼��������ڲ�key�Լ��������ͣ����Ͷ�Ӧ�˲�ͬ�����ļ�·�������ڶ�д��ʵֵ
  145. ***/
  146. try
  147. {
  148. int nConfigInfoCount = (int)m_Configurations["ConfigToolInfo"].GetKeyCount("AttributeInfo");
  149. //FINFO(g_pFPDCtrlLog, "ConfigInfo Count: {$}", nConfigInfoCount);
  150. m_pAttribute->clear();
  151. m_pDescription->clear();
  152. for (int nInfoIndex = 0; nInfoIndex < nConfigInfoCount; nInfoIndex++)
  153. {
  154. DescriptionTemp.clear();
  155. ListTemp.clear();
  156. //AttributeType
  157. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["Type"];
  158. DescriptionTemp.add(AttributeType, strTemp.c_str());
  159. //FINFO(g_pFPDCtrlLog, "--> {$}: {$}", AttributeType, strTemp.c_str());
  160. strType = strTemp; //��¼�����������
  161. //AttributeKey
  162. //1. ����AttributeType���ڲ�key������·�����õ���ǰ����ʵֵ
  163. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["InnerKey"];
  164. nTemp = (int)m_Configurations["ConfigToolInfo"][nInfoIndex]["PathID"];
  165. GetDeviceConfigValue(r_config, strTemp.c_str(), nTemp, strValue);
  166. //2. ��ֵ
  167. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeKey"];
  168. if ("int" == strType)
  169. {
  170. (*m_pAttribute).add(strTemp.c_str(), atoi(strValue.c_str()));
  171. //FINFO(g_pFPDCtrlLog, "Key {$}: {$}", strTemp.c_str(), atoi(strValue.c_str()));
  172. }
  173. else if ("float" == strType)
  174. {
  175. (*m_pAttribute).add(strTemp.c_str(), atof(strValue.c_str()));
  176. //FINFO(g_pFPDCtrlLog, "Key {$}: {$}", strTemp.c_str(), atof(strValue.c_str()));
  177. }
  178. else //�����Ȱ�string���ʹ���
  179. {
  180. (*m_pAttribute).add(strTemp.c_str(), strValue.c_str());
  181. //FINFO(g_pFPDCtrlLog, "Key {$}: {$}", strTemp.c_str(), strValue.c_str());
  182. }
  183. //AttributeAccess
  184. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["Access"];
  185. DescriptionTemp.add(AttributeAccess, strTemp.c_str());
  186. //FINFO(g_pFPDCtrlLog, "{$}: {$}", AttributeAccess, strTemp.c_str());
  187. //AttributeRangeMin
  188. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["RangeMin"];
  189. if (strTemp != "") //����Ҫ��������Ϊ��
  190. {
  191. DescriptionTemp.add(AttributeRangeMin, strTemp.c_str());
  192. //FINFO(g_pFPDCtrlLog, "{$}: {$}", AttributeRangeMin, strTemp.c_str());
  193. }
  194. //AttributeRangeMax
  195. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["RangeMax"];
  196. if (strTemp != "") //����Ҫ��������Ϊ��
  197. {
  198. DescriptionTemp.add(AttributeRangeMax, strTemp.c_str());
  199. //FINFO(g_pFPDCtrlLog, "{$}: {$}", AttributeRangeMax, strTemp.c_str());
  200. }
  201. //AttributeList
  202. nTemp = m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["ListNum"];
  203. if (nTemp > 0) //ListNum������0ʱ˵������Ҫlist����
  204. {
  205. for (int nListIndex = 0; nListIndex < nTemp; nListIndex++)
  206. {
  207. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["ListInfo"][nListIndex];
  208. //sprintf_s(sstream, "{$}", nListIndex);
  209. auto temKey = std::to_string(nListIndex);
  210. ListTemp.add(temKey.c_str(), strTemp.c_str());
  211. //FINFO(g_pFPDCtrlLog, "list {$}: {$}", nListIndex, strTemp.c_str());
  212. }
  213. DescriptionTemp.add(AttributeList, ListTemp);
  214. }
  215. //AttributeRequired
  216. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["Required"];
  217. DescriptionTemp.add(AttributeRequired, strTemp.c_str());
  218. //FINFO(g_pFPDCtrlLog, "{$}: {$}", AttributeRequired, strTemp.c_str());
  219. //AttributeDefaultValue
  220. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeDescripition"]["DefaultValue"];
  221. if (strTemp != "") //����Ҫ��������Ϊ��
  222. {
  223. DescriptionTemp.add(AttributeDefaultValue, strTemp.c_str());
  224. //FINFO(g_pFPDCtrlLog, "{$}: {$}", AttributeDefaultValue, strTemp.c_str());
  225. }
  226. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeKey"];
  227. (*m_pDescription).add(strTemp.c_str(), DescriptionTemp);
  228. }
  229. }
  230. catch (exception e)
  231. {
  232. FERROR("Get config error: {$}", e.what());
  233. return "";
  234. }
  235. ResDataObject resDeviceResource;
  236. resDeviceResource.add(ConfKey::CcosDetectorAttribute, (*m_pAttribute));
  237. resDeviceResource.add(ConfKey::CcosDetectorDescription, (*m_pDescription));
  238. ResDataObject DescriptionTempEx;
  239. DescriptionTempEx.add(ConfKey::CcosDetectorConfig, resDeviceResource);
  240. m_DeviceConfig = DescriptionTempEx;
  241. string res = DescriptionTempEx.encode();
  242. printf("HaoBoRF driver module: get resource over \r\n");
  243. //FINFO("get resource over {$}", res.c_str());//�˴��ڵ��Զ�ȡ���õ�ʱ���ٷſ�����Ȼ��ӡ�ܳ�����־������
  244. FINFO("get resource over!");
  245. return res;
  246. }
  247. std::string nsFPD::HaoBoDriver::DeviceProbe()
  248. {
  249. printf("--Driver-- DeviceProbe \r\n");
  250. FINFO("--Driver-- DeviceProbe");
  251. ResDataObject r_config, HardwareInfo;
  252. if (r_config.loadFile(m_ConfigFileName.c_str()))
  253. {
  254. HardwareInfo.add("MajorID", r_config["CONFIGURATION"]["MajorID"]);
  255. HardwareInfo.add("MinorID", "Device");
  256. HardwareInfo.add("VendorID", r_config["CONFIGURATION"]["VendorID"]);
  257. HardwareInfo.add("ProductID", r_config["CONFIGURATION"]["ProductID"]);
  258. HardwareInfo.add("SerialID", r_config["CONFIGURATION"]["SerialID"]);
  259. }
  260. else
  261. {
  262. HardwareInfo.add("MajorID", "Detector");
  263. HardwareInfo.add("MinorID", "Device");
  264. HardwareInfo.add("VendorID", "HaoBo");
  265. HardwareInfo.add("ProductID", "HaoBo");
  266. HardwareInfo.add("SerialID", "1234");
  267. }
  268. string str = HardwareInfo.encode();
  269. return str;
  270. }
  271. bool nsFPD::HaoBoDriver::GetDeviceConfig(std::string& Cfg)
  272. {
  273. printf("--Driver-- GetDeviceConfig \r\n");
  274. FINFO("--Driver-- GetDeviceConfig");
  275. Cfg = m_DeviceConfig.encode();
  276. FINFO("GetDeviceConfig over");
  277. return true;
  278. }
  279. bool nsFPD::HaoBoDriver::SetDeviceConfig(std::string Cfg)
  280. {
  281. printf("--Driver-- SetDeviceConfig \r\n");
  282. FINFO("--Driver-- SetDeviceConfig {$}", Cfg.c_str());
  283. ResDataObject DeviceConfig;
  284. DeviceConfig.decode(Cfg.c_str());
  285. ResDataObject DescriptionTempEx;
  286. DescriptionTempEx = DeviceConfig["DeviceConfig"];
  287. bool bSaveFile = false; //true:���±��������ļ�
  288. string strAccess = "";
  289. for (int i = 0; i < DescriptionTempEx.size(); i++)
  290. {
  291. ResDataObject temp = DescriptionTempEx[i];
  292. FINFO("{$}", temp.encode());
  293. for (int j = 0; j < temp.size(); j++)
  294. {
  295. string strKey = temp.GetKey(j);
  296. FINFO("{$}", strKey.c_str());
  297. try
  298. {
  299. if (m_pAttribute->GetFirstOf(strKey.c_str()) >= 0)
  300. {
  301. strAccess = (string)(*m_pDescription)[strKey.c_str()]["Access"];
  302. if ("RW" == strAccess || "rw" == strAccess)
  303. {
  304. //�޸Ķ�Ӧ���ã���������Ԫ��������Ҫͬʱ�������޸ĺ����޸���ʵֵ
  305. //1. �޸��ڴ��е�ֵ�����ڸ��ϲ㷢��Ϣ
  306. (*m_pAttribute)[strKey.c_str()] = temp[j];
  307. //2. �õ�Innerkey
  308. int nConfigInfoCount = (int)m_Configurations["ConfigToolInfo"].GetKeyCount("AttributeInfo");
  309. FINFO("ConfigInfo Count: {$}", nConfigInfoCount);
  310. string strTemp = ""; //�洢AttributeKey
  311. for (int nInfoIndex = 0; nInfoIndex < nConfigInfoCount; nInfoIndex++)
  312. {
  313. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["AttributeKey"];
  314. if (strTemp == strKey)
  315. {
  316. strTemp = (string)m_Configurations["ConfigToolInfo"][nInfoIndex]["InnerKey"];
  317. break;
  318. }
  319. }
  320. //3. �޸������ļ��е�ֵ
  321. if (SetDeviceConfigValue(m_Configurations, strTemp.c_str(), 1, temp[j]))
  322. {
  323. bSaveFile = true;
  324. }
  325. }
  326. else
  327. {
  328. FINFO("{$} is not a RW configuration item", strKey.c_str());
  329. }
  330. }
  331. }
  332. catch (ResDataObjectExption& e)
  333. {
  334. FERROR("SetDriverConfig crashed: {$}", e.what());
  335. return false;
  336. }
  337. }
  338. }
  339. if (bSaveFile)
  340. {
  341. //3. ���±��������ļ�
  342. SaveConfigFile(true);
  343. }
  344. return true;
  345. }
  346. bool nsFPD::HaoBoDriver::SaveConfigFile(bool bSendNotify)
  347. {
  348. FINFO("--Driver-- SaveConfigFile start m_ConfigFileName:{$}", m_ConfigFileName);
  349. m_ConfigAll["CONFIGURATION"] = m_Configurations;
  350. m_ConfigAll.SaveFile(m_ConfigFileName.c_str());
  351. FINFO("SaveConfigFile over");
  352. return true;
  353. }
  354. bool nsFPD::HaoBoDriver::GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue)
  355. {
  356. return true;
  357. }
  358. bool nsFPD::HaoBoDriver::SetDeviceConfigValue(ResDataObject& config, const char* pInnerKey,
  359. int nPathID, const char* szValue)
  360. {
  361. return true;
  362. }
  363. nsFPD::FPDDeviceHaoBo::FPDDeviceHaoBo(std::shared_ptr<IOEventCenter> center,std::string strConfigPath)
  364. : FPDDeviceMould("HaoBoFPD")
  365. {
  366. m_strWorkPath = GetProcessDirectory();
  367. m_nWidth = 0;
  368. m_nHeight = 0;
  369. m_nImgBits = 0;
  370. m_nAngle = 0;
  371. m_nPixelSpacing = 0;
  372. m_nSensitivity = 0;
  373. m_fDose = 0.0f;
  374. m_pImgBuffer = nullptr;
  375. m_eAppStatus = APP_STATUS::APP_STATUS_IDLE;
  376. m_bDeviceConnect = false;
  377. m_nCurrentAcqMode = 0;
  378. m_fCurrentPPS = 15.0f;
  379. m_vAcqModeInfoList.clear();
  380. m_fFactorEXI2UGY = 0.0f;
  381. m_DetectorCtrlUnit.reset(new OemCtrl(center, this));
  382. m_AcqUnit.reset(new OemAcq(center, this));
  383. m_SyncUnit.reset(new OemSync(center, this));
  384. m_CalibUnit.reset(new OemCalib(center, this));
  385. m_DetectorConfiguration.reset(new DetectorConfiguration(strConfigPath));
  386. //m_WarnAndError.reset(new FPDErrorWarning(center, DetectorUnitType, m_strWorkPath));
  387. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_INIT));
  388. m_CalibUnit->SetCalibrationStatus(to_string(CCOS_CALIBRATION_STATUS_STANDBY));
  389. EventCenter = center;
  390. }
  391. nsFPD::FPDDeviceHaoBo::~FPDDeviceHaoBo()
  392. {
  393. FINFO("~FPDDeviceHaoBo");
  394. if (g_pDetector)
  395. {
  396. delete g_pDetector;
  397. g_pDetector = nullptr;
  398. }
  399. if (m_pImgBuffer)
  400. {
  401. delete m_pImgBuffer;
  402. m_pImgBuffer = nullptr;
  403. }
  404. m_vAcqModeInfoList.clear();
  405. }
  406. std::string nsFPD::FPDDeviceHaoBo::GetGUID() const
  407. {
  408. return DetectorUnitType;
  409. }
  410. bool nsFPD::FPDDeviceHaoBo::CreateDevice()
  411. {
  412. printf("--Func-- device CreateDevice \r\n");
  413. FINFO("--Func-- device CreateDevice \n");
  414. if (!LoadConfig())
  415. {
  416. return false;
  417. }
  418. if (nullptr == g_pDetector)
  419. {
  420. g_pDetector = new Detector_HaoBoRF();
  421. }
  422. g_pDetector->DriverEntry(this, m_DetectorConfiguration->m_Configurations, m_strWorkPath.c_str());
  423. m_DetectorCtrlUnit->SetAttachStatus("1"); //û��attach���ܣ�ֱ���Ϸ�1��ʹ�ͻ�����ʾ̽����״̬
  424. m_DetectorCtrlUnit->SetDetectorWidth(to_string(m_stDeviceConfig.nDetectorWidth));
  425. m_DetectorCtrlUnit->SetDetectorHeight(to_string(m_stDeviceConfig.nDetectorHeight));
  426. m_DetectorCtrlUnit->SetSupportDDR(to_string(m_stDeviceConfig.nSupportDDR));
  427. m_DetectorCtrlUnit->SetTargetEXI("5000");
  428. m_CalibUnit->SetOffsetInterval(to_string(m_stDeviceConfig.nOffsetInterval));
  429. return true;
  430. }
  431. RET_STATUS nsFPD::FPDDeviceHaoBo::Connect()
  432. {
  433. printf("--Func-- device Connect \r\n");
  434. FINFO("--Func-- device Connect");
  435. if (!g_pDetector->Connect(this))
  436. {
  437. FERROR("Connect Detector fail!");
  438. return RET_STATUS::RET_FAILED;
  439. }
  440. return RET_STATUS::RET_SUCCEED;
  441. }
  442. bool nsFPD::FPDDeviceHaoBo::Prepare()
  443. {
  444. printf("--Func-- device Prepare \r\n");
  445. FINFO("--Func-- device prepare nDetectorWidth:{$},nDetectorHeight:{$}", m_stDeviceConfig.nDetectorWidth, m_stDeviceConfig.nDetectorHeight);
  446. //blockname, fullimage blocksize, blockcount,previewimage blocksize,blockcount
  447. EventCenter->OnMaxBlockSize("HaoBoRfQue", 4000 * 4000 * 2, 10, 1500 * 1500 * 2, 1);
  448. return true;
  449. }
  450. bool nsFPD::FPDDeviceHaoBo::LoadConfig()
  451. {
  452. printf("--Func-- device LoadConfig \r\n");
  453. FINFO("--Func-- device LoadConfig start");
  454. //LoadConfigurations������±��������ȵ��ã������������
  455. if (!m_DetectorConfiguration->LoadConfigurations(m_stDeviceConfig, m_vAcqModeInfoList))
  456. {
  457. FERROR("Load configuration file failed!!!");
  458. return false;
  459. }
  460. //const char* strkey, int initialvalue, int min, int WarnMin, int WarnMax, int CalibWarnMin, int CalibWarnMax, int max, int accuracy, std::shared_ptr <CCOS::Dev::IOEventCenter> EventCenter
  461. m_Battery.reset(new DeviceBatteryMould("DetectorBattery", 0,
  462. m_stDeviceConfig.nBatteryLimit,
  463. m_stDeviceConfig.nBatteryWarning,
  464. 90, 20, 90, 100, 0, EventCenter));
  465. //const char* strkey, float initialvalue, float min, float WarnMin, float WarnMax, float CalibWarnMin, float CalibWarnMax, float max, float accuracy,std::shared_ptr <CCOS::Dev::IOEventCenter> EventCenter
  466. m_Temperature.reset(new DeviceTemperatureMould("DetectorTemperature", 0.0f,
  467. m_stDeviceConfig.fTemperatureErrorMin,
  468. m_stDeviceConfig.fTemperatureWarnMin,
  469. m_stDeviceConfig.fTemperatureWarnMax,
  470. 20.0f, 100.0f,
  471. m_stDeviceConfig.fTemperatureErrorMax,
  472. 0.0f, EventCenter));
  473. //const char* strkey, int initialvalue, int min, int WarnMin, int WarnMax, int CalibWarnMin, int CalibWarnMax, int max, int accuracy, std::shared_ptr <CCOS::Dev::IOEventCenter> EventCenter
  474. m_Wifi.reset(new DeviceWifiMould("DetectorWifi", 0,
  475. m_stDeviceConfig.nWifiLimit,
  476. m_stDeviceConfig.nWifiWarning,
  477. 100, 10, 100, 100, 0, EventCenter));
  478. FINFO("--Func-- device LoadConfig end");
  479. return true;
  480. }
  481. void nsFPD::FPDDeviceHaoBo::Register()
  482. {
  483. FINFO("--Func-- device Register \n");
  484. auto Disp = m_Dispatch.Lock().As();
  485. RegisterCtrl(Disp);
  486. RegisterAcq(Disp);
  487. RegisterSync(Disp);
  488. RegisterCalib(Disp);
  489. RegisterOthers(Disp);
  490. }
  491. RET_STATUS nsFPD::FPDDeviceHaoBo::EnterExam(int nExamMode)
  492. {
  493. FINFO("--Func-- EnterExam {$}", nExamMode);
  494. switch (nExamMode)
  495. {
  496. case APP_STATUS_WORK_BEGIN:
  497. FINFO("Enter into Exam Windows");
  498. m_eAppStatus = APP_STATUS_WORK_BEGIN;
  499. break;
  500. case APP_STATUS_WORK_END:
  501. FINFO("Quit Exam Windows");
  502. m_eAppStatus = APP_STATUS_WORK_END;
  503. break;
  504. case APP_STATUS_DETSHARE_BEGIN:
  505. FINFO("Enter into Detector Share Windows");
  506. m_eAppStatus = APP_STATUS_DETSHARE_BEGIN;
  507. break;
  508. case APP_STATUS_DETSHAR_END:
  509. m_eAppStatus = APP_STATUS_IDLE;
  510. FINFO("Quit Detector Share Windows");
  511. m_eAppStatus = APP_STATUS_DETSHAR_END;
  512. break;
  513. case APP_STATUS_CAL_BEGIN:
  514. FINFO("Enter into Calibration Windows");
  515. m_eAppStatus = APP_STATUS_CAL_BEGIN;
  516. break;
  517. case APP_STATUS_CAL_END:
  518. FINFO("Quit Calibration Windows");
  519. m_eAppStatus = APP_STATUS_CAL_END;
  520. break;
  521. case APP_STATUS_WORK_IN_SENSITIVITY:
  522. FINFO("Enter into sensitivity test interface");
  523. m_eAppStatus = APP_STATUS_WORK_IN_SENSITIVITY;
  524. break;
  525. default:
  526. break;
  527. }
  528. g_pDetector->EnterExamMode(nExamMode);
  529. return RET_STATUS::RET_SUCCEED;
  530. }
  531. bool nsFPD::FPDDeviceHaoBo::GetLogicMode(string& strAcqMode, int& nLogicMode)
  532. {
  533. if (strAcqMode == "RAD")
  534. {
  535. nLogicMode = RAD;
  536. }
  537. else if (strAcqMode == "CF")
  538. {
  539. nLogicMode = CF;
  540. }
  541. else if (strAcqMode == "PF")
  542. {
  543. nLogicMode = PF;
  544. }
  545. else if (strAcqMode == "1")
  546. {
  547. nLogicMode = RAD;
  548. }
  549. else if (strAcqMode == "2")
  550. {
  551. nLogicMode = CF;
  552. }
  553. else if (strAcqMode == "3")
  554. {
  555. nLogicMode = PF;
  556. }
  557. else
  558. {
  559. FERROR("Not support mode!");
  560. return false;
  561. }
  562. return true;
  563. }
  564. RET_STATUS nsFPD::FPDDeviceHaoBo::SetAcqMode(string strAcqMode)
  565. {
  566. printf("--Func-- SetAcqMode(%s) \r\n", strAcqMode.c_str());
  567. FINFO("--Func-- SetAcqMode strAcqMode:{$}", strAcqMode);
  568. RET_STATUS ret = RET_STATUS::RET_FAILED;
  569. //���û���ӣ���ִ��
  570. if (!m_bDeviceConnect)
  571. {
  572. FERROR("Detector not connected, return");
  573. return ret;
  574. }
  575. //���ڶ�̬��Ҫready�죬��֪ͨ̽����ready״̬������֪ͨ
  576. if (DETECTOR_STATUS_ACQ == m_DetectorCtrlUnit->GetDetectorStatus() || DETECTOR_STATUS_CALIB == m_DetectorCtrlUnit->GetDetectorStatus())
  577. {
  578. FINFO("Detector is not standby! neet to stop");
  579. ret = StopAcquisition();
  580. if (ret != RET_STATUS::RET_SUCCEED)
  581. {
  582. FERROR("SetAcqMode StopAcquisition fail!!!");
  583. return ret;
  584. }
  585. else
  586. {
  587. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_STANDBY));
  588. }
  589. }
  590. else
  591. {
  592. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_STANDBY));
  593. }
  594. int nMode = RAD;
  595. bool bRet = GetLogicMode(strAcqMode, nMode);
  596. if (!bRet)
  597. {
  598. return RET_STATUS::RET_FAILED;
  599. }
  600. try
  601. {
  602. ResDataObject objModeConfig = m_DetectorConfiguration->m_Configurations;
  603. int nModeCount = (int)objModeConfig["ModeTable"].size();
  604. for (int i = 0; i < nModeCount; i++)
  605. {
  606. //FINFO("ModeTable {$}, {$}",i, objModeConfig["ModeTable"][i].encode());
  607. int nAppModeID = (int)objModeConfig["ModeTable"][i]["LogicMode"];
  608. if (nAppModeID == nMode)
  609. {
  610. m_nAngle = (int)objModeConfig["ModeTable"][i]["RotateAngle"];
  611. m_nPixelSpacing = (int)objModeConfig["ModeTable"][i]["PixelPitch"];
  612. m_nImgBits = (int)objModeConfig["ModeTable"][i]["PhySizeInfoBit"];
  613. m_nSensitivity = (int)objModeConfig["ModeTable"][i]["Sensitivity"];
  614. FINFO("m_nAngle:{$}, m_nPixelSpacing:{$}, m_nImgBits:{$}, m_nSensitivity:{$}", m_nAngle, m_nPixelSpacing, m_nImgBits, m_nSensitivity);
  615. string strDoseOfExi = std::to_string(m_nSensitivity);
  616. m_fFactorEXI2UGY = 100.0f / stof(strDoseOfExi) * 1.0f;//ͳһʹ��IEC��׼ �����Ľ���Ϣ���޵�λ ugy * 100 -ugy������Zskk̽������FactorEXI2UGY����*100
  617. FINFO("m_fFactorEXI2UGY = {$} ", m_fFactorEXI2UGY);
  618. m_DetectorCtrlUnit->SetFPDSensitivity(std::to_string(m_fFactorEXI2UGY));
  619. break;
  620. }
  621. }
  622. }
  623. catch (ResDataObjectExption& e)
  624. {
  625. FERROR("Read configuration failed, Error code: {$}", e.what());
  626. ret = RET_STATUS::RET_FAILED;
  627. return ret;
  628. }
  629. m_nCurrentAcqMode = nMode;
  630. if (g_pDetector->SetAcqMode(nMode))
  631. {
  632. ret = RET_STATUS::RET_SUCCEED;
  633. m_AcqUnit->AcqModeNotify(strAcqMode);
  634. }
  635. else
  636. {
  637. ret = RET_STATUS::RET_FAILED;
  638. }
  639. return ret;
  640. }
  641. RET_STATUS nsFPD::FPDDeviceHaoBo::PrepareAcquisition()
  642. {
  643. printf("--Func-- PrepareAcquisition \r\n");
  644. FINFO("--Func-- PrepareAcquisition");
  645. RET_STATUS ret = RET_STATUS::RET_FAILED;
  646. if (!m_bDeviceConnect)
  647. {
  648. FERROR("Detector not connected, return");
  649. return ret;
  650. }
  651. if ((m_CalibUnit->GetCalibrationStatus() == CCOS_CALIBRATION_STATUS_RUNNING) ||
  652. (m_CalibUnit->GetCalibrationStatus() == CCOS_CALIBRATION_STATUS_ACTIVE))
  653. {
  654. FERROR("PrepareAcquisition failed! Detector at Calibration status!");
  655. return ret;
  656. }
  657. if (g_pDetector->PrepareAcquisition(this))
  658. {
  659. ret = RET_STATUS::RET_SUCCEED;
  660. }
  661. FINFO("PrepareAcquisition over");
  662. return ret;
  663. }
  664. RET_STATUS nsFPD::FPDDeviceHaoBo::StartAcquisition(string in)
  665. {
  666. printf("--Func-- StartAcquisition \r\n");
  667. FINFO("--Func-- StartAcquisition");
  668. FINFO("StartAcquisition param in:{$}", in);
  669. RET_STATUS ret = RET_STATUS::RET_FAILED;
  670. if (!m_bDeviceConnect)
  671. {
  672. FERROR("Detector not connected, return");
  673. return ret;
  674. }
  675. FINFO("StartAcquisition m_nCurrentAcqMode:{$}", m_nCurrentAcqMode);
  676. if (in == "RAD" || in == "CF" || in == "PF")
  677. {
  678. ret = SetAcqMode(in);
  679. if (ret != RET_STATUS::RET_SUCCEED)
  680. {
  681. FERROR("StartAcquisition SetAcqMode fail!");
  682. return ret;
  683. }
  684. }
  685. else
  686. {
  687. FERROR("Not support this mode, mode name:{$}",in);
  688. return ret;
  689. }
  690. ret = PrepareAcquisition();
  691. if (ret != RET_STATUS::RET_SUCCEED)
  692. {
  693. FERROR("StartAcquisition PrepareAcquisition fail!");
  694. return ret;
  695. }
  696. if (g_pDetector->StartAcquisition(this))
  697. {
  698. ret = RET_STATUS::RET_SUCCEED;
  699. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_ACQ));
  700. }
  701. else
  702. {
  703. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_STANDBY));
  704. }
  705. FINFO("StartAcquisition over");
  706. return ret;
  707. }
  708. RET_STATUS nsFPD::FPDDeviceHaoBo::StopAcquisition()
  709. {
  710. printf("--Func-- StopAcquisition \r\n");
  711. FINFO("--Func-- StopAcquisition");
  712. RET_STATUS ret = RET_STATUS::RET_FAILED;
  713. if (!m_bDeviceConnect)
  714. {
  715. FERROR("Detector not connected, return");
  716. return ret;
  717. }
  718. if (DETECTOR_STATUS_STANDBY == m_DetectorCtrlUnit->GetDetectorStatus())
  719. {
  720. //printf(("Detector already at stanby status.\n");
  721. FINFO("Detector already at stanby status.");
  722. ret = RET_STATUS::RET_SUCCEED;
  723. }
  724. else
  725. {
  726. if (g_pDetector->StopAcquisition(this))
  727. {
  728. ret = RET_STATUS::RET_SUCCEED;
  729. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_STANDBY));
  730. }
  731. }
  732. FINFO("StopAcquisition over");
  733. return ret;
  734. }
  735. RET_STATUS nsFPD::FPDDeviceHaoBo::SetFluPPS(float fFluPPS)
  736. {
  737. FINFO("--Func-- SetFluPPS:{$}", fFluPPS);
  738. m_fCurrentPPS = fFluPPS;
  739. bool bFind = false;
  740. //����m_fFrameRateֵ
  741. for (size_t i = 0; i < m_vAcqModeInfoList.size(); i++)
  742. {
  743. if (m_vAcqModeInfoList[i].fFrequency == fFluPPS)
  744. {
  745. FINFO("find config pps");
  746. bFind = true;
  747. g_pDetector->UpdateModeInRunning(m_vAcqModeInfoList[i].nModeID,fFluPPS);
  748. m_AcqUnit->FluPPSNotify(fFluPPS);
  749. break;
  750. }
  751. }
  752. if (!bFind)
  753. {
  754. FINFO("not find config pps");
  755. float fRealFps = g_pDetector->SetFluPPS(fFluPPS);
  756. if (fRealFps > 0.0f)
  757. {
  758. m_AcqUnit->FluPPSNotify(fRealFps);
  759. }
  760. }
  761. return RET_STATUS::RET_SUCCEED;
  762. }
  763. RET_STATUS nsFPD::FPDDeviceHaoBo::GetFluPPS(float& fFluPPS)
  764. {
  765. g_pDetector->GetFluPPS(fFluPPS);
  766. return RET_STATUS::RET_SUCCEED;
  767. }
  768. RET_STATUS nsFPD::FPDDeviceHaoBo::SetXrayOnNum()
  769. {
  770. FINFO("--Func-- SetXrayOnNum");
  771. return RET_STATUS::RET_FAILED;
  772. }
  773. RET_STATUS nsFPD::FPDDeviceHaoBo::SetExposureTimes(int nTimes)
  774. {
  775. FINFO("--Func-- SetExposureTimes({$})", nTimes);
  776. if (g_pDetector->SetExposureTimes(nTimes))
  777. {
  778. return RET_STATUS::RET_SUCCEED;
  779. }
  780. return RET_STATUS::RET_FAILED;
  781. }
  782. RET_STATUS nsFPD::FPDDeviceHaoBo::ActiveCalibration(CCOS_CALIBRATION_TYPE eType)
  783. {
  784. printf("--Func-- ActiveCalibration eType:%d \r\n", eType);
  785. FINFO("--Func-- ActiveCalibration {$}", (int)eType);
  786. RET_STATUS ret = RET_STATUS::RET_FAILED;
  787. if (!m_bDeviceConnect)
  788. {
  789. FERROR("Detector not connected, return");
  790. return ret;
  791. }
  792. if (eType == CCOS_CALIBRATION_TYPE_NONE || eType == CCOS_CALIBRATION_TYPE_MAX)
  793. {
  794. return RET_STATUS::RET_INVALID;
  795. }
  796. if (DETECTOR_STATUS_STANDBY != m_DetectorCtrlUnit->GetDetectorStatus())
  797. {
  798. if (DETECTOR_STATUS_ACQ == m_DetectorCtrlUnit->GetDetectorStatus())
  799. {
  800. //printf(("ActiveCalibration failed. Detector at Acq status\r\n");
  801. FERROR("ActiveCalibration failed. Detector at Acq status");
  802. }
  803. return RET_STATUS::RET_FAILED;
  804. }
  805. if (g_pDetector->ActiveCalibration(this, eType))
  806. {
  807. ret = RET_STATUS::RET_SUCCEED;
  808. m_CalibUnit->SetCalibrationStatus(to_string(CCOS_CALIBRATION_STATUS_ACTIVE));
  809. m_CalibUnit->SetCalibrationProgress("0");
  810. }
  811. else
  812. {
  813. FERROR("Active calibration failed");
  814. }
  815. FINFO("ActiveCalibration over");
  816. return ret;
  817. }
  818. RET_STATUS nsFPD::FPDDeviceHaoBo::PrepareCalibration()
  819. {
  820. printf("--Func-- PrepareCalibration \r\n");
  821. FINFO("--Func-- PrepareCalibration");
  822. RET_STATUS ret = RET_STATUS::RET_FAILED;
  823. if (!m_bDeviceConnect)
  824. {
  825. FERROR("Detector not connected, return");
  826. return ret;
  827. }
  828. if (g_pDetector->PrepareCalibration(this))
  829. {
  830. ret = RET_STATUS::RET_SUCCEED;
  831. }
  832. else
  833. {
  834. FERROR("Prepare calibration failed");
  835. }
  836. FINFO("PrepareCalibration over");
  837. return ret;
  838. }
  839. RET_STATUS nsFPD::FPDDeviceHaoBo::GetRequestedDose(std::string& strDose)
  840. {
  841. printf("--Func-- GetRequestedDose \r\n");
  842. FINFO("--Func-- GetRequestedDose");
  843. RET_STATUS Ret = RET_STATUS::RET_SUCCEED;
  844. bool bGetDoseInfo = false;
  845. ResDataObject out;
  846. CCOS_CALIBRATION_TYPE nCalibrationType = m_CalibUnit->GetCalibrationType();
  847. if (CCOS_CALIBRATION_TYPE_DARK == nCalibrationType)
  848. {
  849. out.add("Dose", 0.0f);
  850. out.add("kV", 0.0f);
  851. out.add("mA", 0.0f);
  852. out.add("ms", 0.0f);
  853. out.add("mAs", 0.0f);
  854. bGetDoseInfo = true;
  855. }
  856. else if (CCOS_CALIBRATION_TYPE_XRAY == nCalibrationType)
  857. {
  858. for (int i = 0; i < m_CalibDoseList.size(); i++)
  859. {
  860. ResDataObject temp = m_CalibDoseList[i];
  861. int nDose = temp["Dose"];
  862. int nDoseParem = (int)(m_fDose * 1000);
  863. if (nDoseParem == nDose)
  864. {
  865. out.add("Dose", nDoseParem);
  866. out.add("kV", temp["kV"]);
  867. out.add("mA", temp["mA"]);
  868. out.add("ms", temp["ms"]);
  869. out.add("mAs", temp["mAs"]);
  870. bGetDoseInfo = true;
  871. break;
  872. }
  873. }
  874. }
  875. else
  876. {
  877. Ret = RET_STATUS::RET_FAILED;
  878. }
  879. if (bGetDoseInfo)
  880. {
  881. strDose = out.encode();
  882. FINFO("GetRequestedDose {$} over", strDose.c_str());
  883. }
  884. else
  885. {
  886. FERROR("GetRequestedDose failed");
  887. }
  888. return Ret;
  889. }
  890. RET_STATUS nsFPD::FPDDeviceHaoBo::StartCalibration()
  891. {
  892. printf("--Func-- StartCalibration \r\n");
  893. FINFO("--Func-- StartCalibration");
  894. RET_STATUS ret = RET_STATUS::RET_FAILED;
  895. if (!m_bDeviceConnect)
  896. {
  897. FERROR("Detector not connected, return");
  898. return ret;
  899. }
  900. if ((m_CalibUnit->GetCalibrationStatus() != CCOS_CALIBRATION_STATUS_PAUSE) && (m_CalibUnit->GetCalibrationStatus() != CCOS_CALIBRATION_STATUS_ACTIVE))
  901. {
  902. FERROR("Start calibration failed, in {$} status", (int)m_CalibUnit->GetCalibrationStatus());
  903. return ret;
  904. }
  905. if (DETECTOR_STATUS_STANDBY != m_DetectorCtrlUnit->GetDetectorStatus())
  906. {
  907. if (DETECTOR_STATUS_ACQ == m_DetectorCtrlUnit->GetDetectorStatus())
  908. {
  909. FERROR("Start calibration failed. Detector already at Acq status");
  910. }
  911. return ret;
  912. }
  913. if (m_CalibUnit->GetCalibrationStatus() == CCOS_CALIBRATION_STATUS_RUNNING)
  914. {
  915. FERROR("Detector already at calib status");
  916. return ret;
  917. }
  918. if (g_pDetector->StartCalibration(this))
  919. {
  920. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_ACQ));
  921. m_CalibUnit->SetCalibrationStatus(to_string(CCOS_CALIBRATION_STATUS_RUNNING));
  922. ret = RET_STATUS::RET_SUCCEED;
  923. }
  924. else
  925. {
  926. FERROR("Start calibration failed");
  927. return ret;
  928. }
  929. FINFO("StartCalibration over");
  930. return ret;
  931. }
  932. RET_STATUS nsFPD::FPDDeviceHaoBo::StopCalibration()
  933. {
  934. printf("--Func-- StopCalibration \r\n");
  935. FINFO("--Func-- StopCalibration");
  936. RET_STATUS ret = RET_STATUS::RET_FAILED;
  937. if (!m_bDeviceConnect)
  938. {
  939. FERROR("Detector not connected, return");
  940. return ret;
  941. }
  942. if (g_pDetector->StopCalibration(this))
  943. {
  944. ret = RET_STATUS::RET_SUCCEED;
  945. m_CalibUnit->SetCalibrationStatus(to_string(CCOS_CALIBRATION_STATUS_STANDBY));
  946. m_CalibUnit->SetCalibrationProgress("100");
  947. }
  948. else
  949. {
  950. FERROR("Start calibration failed");
  951. }
  952. FINFO("StopCalibration over");
  953. return ret;
  954. }
  955. RET_STATUS nsFPD::FPDDeviceHaoBo::CompleteCalibration()
  956. {
  957. FINFO("--Func Device-- CompleteCalibration Start");
  958. FINFO("CompleteCalibration set detector status standby");
  959. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_STANDBY));
  960. m_CalibUnit->SetCalibrationStatus(to_string(CCOS_CALIBRATION_STATUS_STANDBY));
  961. m_CalibUnit->SetCalibrationProgress("100");
  962. FINFO("Device CompleteCalibration Over");
  963. return RET_STATUS::RET_SUCCEED;
  964. }
  965. bool nsFPD::FPDDeviceHaoBo::Support_DarkCalib()
  966. {
  967. return true;
  968. }
  969. bool nsFPD::FPDDeviceHaoBo::Support_XrayCalib()
  970. {
  971. return true;
  972. }
  973. //�����϶����Action��Attr������Ҫ��CCOS.Dev.FPDDeviceMould.hpp�ж��壬֮ǰ���ڲ���������е�������Detector_Model_Def.h�ж���� �Ժ�Ҫ�淶
  974. void nsFPD::FPDDeviceHaoBo::RegisterCtrl(nsDetail::Dispatch* Dispatch)
  975. {
  976. Dispatch->Action.Push(ActionKey::GetFPDinformation, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetDetectorInfo);
  977. Dispatch->Action.Push(ActionKey::ActiveDetector, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSActiveDetector);
  978. Dispatch->Action.Push(ActionKey::EnterExam, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSEnterExam);
  979. Dispatch->Action.Push(ActionKey::ExitExam, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSExitExam);
  980. Dispatch->Action.Push(ActionKey::SetXrayOnNum, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSSetXrayOnNum);
  981. Dispatch->Action.Push(ActionKey::SetExposureTimes, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSSetExposureTimes);
  982. Dispatch->Action.Push(ActionKey::FaultInjection, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSFaultInjection);
  983. Dispatch->Action.Push(ActionKey::EliminateFault, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSEliminateFault);
  984. Dispatch->Get.Push(AttrKey::DetectorStatus, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetFPDStatus);
  985. Dispatch->Get.Push(AttrKey::Description, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetDescription);
  986. Dispatch->Get.Push(AttrKey::FPDSensitivity, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetFPDSensitivity);
  987. Dispatch->Get.Push(AttrKey::TargetEXI, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetTargetEXI);
  988. Dispatch->Get.Push(SupportDDR, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetSupportDDR);
  989. Dispatch->Get.Push(AttrKey::DetectorID, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetDetectorID);
  990. Dispatch->Get.Push(AttrKey::DetectorType, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetDetectorType);
  991. Dispatch->Get.Push(AttrKey::PixelData, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetPixelData);
  992. Dispatch->Get.Push(AttrKey::DetectorWidth, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetDetectorWidth);
  993. Dispatch->Get.Push(AttrKey::DetectorHeight, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::JSGetDetectorHeight);
  994. Dispatch->Set.Push(AttrKey::DetectorStatus, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetDetectorStatus);
  995. Dispatch->Set.Push(AttrKey::Description, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetDescription);
  996. Dispatch->Set.Push(AttrKey::FPDSensitivity, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetFPDSensitivity);
  997. Dispatch->Set.Push(AttrKey::TargetEXI, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetTargetEXI);
  998. Dispatch->Set.Push(SupportDDR, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetSupportDDR);
  999. Dispatch->Set.Push(AttrKey::DetectorID, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetDetectorID);
  1000. Dispatch->Set.Push(AttrKey::DetectorType, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetDetectorType);
  1001. Dispatch->Set.Push(AttrKey::PixelData, m_DetectorCtrlUnit.get(), &DetectorCtrlUnit::SetPixelData);
  1002. }
  1003. void nsFPD::FPDDeviceHaoBo::RegisterAcq(nsDetail::Dispatch* Dispatch)
  1004. {
  1005. Dispatch->Action.Push(ActionKey::SetAcqMode, m_AcqUnit.get(), &AcqUnit::JSSetAcqMode);
  1006. Dispatch->Action.Push(ActionKey::SetValue_PPS, m_AcqUnit.get(), &AcqUnit::JSSetFluPPS);
  1007. Dispatch->Get.Push(AttrKey::AcqMode, m_AcqUnit.get(), &AcqUnit::JSGetAcqMode);
  1008. Dispatch->Get.Push(AttrKey::ZskkFPDState, m_AcqUnit.get(), &AcqUnit::JSGetZskkFPDState);
  1009. Dispatch->Get.Push(AttrKey::NoNeedWaitImage, m_AcqUnit.get(), &AcqUnit::JSGetNoNeedWaitImage);
  1010. Dispatch->Get.Push(AttrKey::ImgDataInfo, m_AcqUnit.get(), &AcqUnit::JSGetLastImage);
  1011. Dispatch->Get.Push(AttrKey::MaxFrameRate, m_AcqUnit.get(), &AcqUnit::JSGetMaxFrameRate);
  1012. Dispatch->Get.Push(AttrKey::FluPPS, m_AcqUnit.get(), &AcqUnit::JSGetFluPPS);
  1013. Dispatch->Set.Push(AttrKey::ZskkFPDState, m_AcqUnit.get(), &AcqUnit::SetZskkFPDState);
  1014. Dispatch->Set.Push(AttrKey::NoNeedWaitImage, m_AcqUnit.get(), &AcqUnit::JSSetNoNeedWaitImage);
  1015. Dispatch->Update.Push(AttrKey::ModeInRunning, m_AcqUnit.get(), &AcqUnit::JSUpdateModeInRunning);
  1016. }
  1017. void nsFPD::FPDDeviceHaoBo::RegisterSync(nsDetail::Dispatch* Dispatch)
  1018. {
  1019. Dispatch->Action.Push(ActionKey::PrepareAcquisition, m_SyncUnit.get(), &SyncUnit::JSPrepareAcquisition);
  1020. Dispatch->Action.Push(ActionKey::StartAcquisition, m_SyncUnit.get(), &SyncUnit::JSStartAcquisition);
  1021. Dispatch->Action.Push(ActionKey::StopAcquisition, m_SyncUnit.get(), &SyncUnit::JSStopAcquisition);
  1022. Dispatch->Get.Push(AttrKey::FPDReadyStatus, m_SyncUnit.get(), &SyncUnit::JSGetFPDReady);
  1023. Dispatch->Get.Push(AttrKey::XwindowStatus, m_SyncUnit.get(), &SyncUnit::JSGetXWindowStatus);
  1024. Dispatch->Get.Push(AttrKey::ImageReadingStatus, m_SyncUnit.get(), &SyncUnit::JSGetImageReadingStatus);
  1025. Dispatch->Set.Push(AttrKey::FPDReadyStatus, m_SyncUnit.get(), &SyncUnit::JSSetFPDReady);
  1026. Dispatch->Set.Push(AttrKey::XwindowStatus, m_SyncUnit.get(), &SyncUnit::JSSetXWindowStatus);
  1027. Dispatch->Set.Push(AttrKey::ImageReadingStatus, m_SyncUnit.get(), &SyncUnit::JSSetImageReadingStatus);
  1028. }
  1029. void nsFPD::FPDDeviceHaoBo::RegisterCalib(nsDetail::Dispatch* Dispatch)
  1030. {
  1031. Dispatch->Action.Push(ActionKey::ActiveCalibration, m_CalibUnit.get(), &CalibUnit::JSActiveCalibration);
  1032. Dispatch->Action.Push(ActionKey::GetRequestedDose, m_CalibUnit.get(), &CalibUnit::JSGetRequestedDose);
  1033. Dispatch->Action.Push(ActionKey::PrepareCalibration, m_CalibUnit.get(), &CalibUnit::JSPrepareCalibration);
  1034. Dispatch->Action.Push(ActionKey::StartCalibration, m_CalibUnit.get(), &CalibUnit::JSStartCalibration);
  1035. Dispatch->Action.Push(ActionKey::StopCalibration, m_CalibUnit.get(), &CalibUnit::JSStopCalibration);
  1036. Dispatch->Action.Push(ActionKey::SetCorrectionType, m_CalibUnit.get(), &CalibUnit::JSSetCorrectionType);
  1037. Dispatch->Action.Push(ActionKey::StartOffset, m_CalibUnit.get(), &CalibUnit::JSStartOffset);
  1038. Dispatch->Action.Push(ActionKey::AbortOffset, m_CalibUnit.get(), &CalibUnit::JSAbortOffset);
  1039. Dispatch->Get.Push(AttrKey::CalibrationStatus, m_CalibUnit.get(), &CalibUnit::JSGetCalibStatus);
  1040. Dispatch->Get.Push(AttrKey::CalibrationProgress, m_CalibUnit.get(), &CalibUnit::JSGetCalibProgress);
  1041. Dispatch->Get.Push(AttrKey::UploadCalibrationFilesResult, m_CalibUnit.get(), &CalibUnit::JSGetUploadCalibrationFilesResult);
  1042. Dispatch->Get.Push(AttrKey::OffsetStatus, m_CalibUnit.get(), &CalibUnit::JSGetOffsetStatus);
  1043. Dispatch->Get.Push(AttrKey::OffsetCounts, m_CalibUnit.get(), &CalibUnit::JSGetOffsetCounts);
  1044. Dispatch->Get.Push(AttrKey::OffsetProgress, m_CalibUnit.get(), &CalibUnit::JSGetOffsetProgress);
  1045. Dispatch->Get.Push(AttrKey::OffsetInterval, m_CalibUnit.get(), &CalibUnit::JSGetOffsetInterval);
  1046. Dispatch->Set.Push(AttrKey::CalibrationStatus, m_CalibUnit.get(), &CalibUnit::SetCalibrationStatus);
  1047. Dispatch->Set.Push(AttrKey::CalibrationProgress, m_CalibUnit.get(), &CalibUnit::SetCalibrationProgress);
  1048. Dispatch->Set.Push(AttrKey::UploadCalibrationFilesResult, m_CalibUnit.get(), &CalibUnit::SetUploadCalibrationFilesResult);
  1049. Dispatch->Set.Push(AttrKey::OffsetStatus, m_CalibUnit.get(), &CalibUnit::SetOffsetStatus);
  1050. Dispatch->Set.Push(AttrKey::OffsetCounts, m_CalibUnit.get(), &CalibUnit::SetOffsetCounts);
  1051. Dispatch->Set.Push(AttrKey::OffsetProgress, m_CalibUnit.get(), &CalibUnit::SetOffsetProgress);
  1052. Dispatch->Set.Push(AttrKey::OffsetInterval, m_CalibUnit.get(), &CalibUnit::SetOffsetInterval);
  1053. Dispatch->Update.Push(AttrKey::OffsetInterval, m_CalibUnit.get(), &CalibUnit::JSUpdateOffsetInterval);
  1054. }
  1055. void nsFPD::FPDDeviceHaoBo::RegisterOthers(nsDetail::Dispatch* Dispatch)
  1056. {
  1057. Dispatch->Get.Push(AttrKey::Temperature_Value, m_Temperature.get(), &DeviceTemperatureMould::JSGetCurrentTemperatureValue);
  1058. Dispatch->Get.Push(AttrKey::Remain_Power_Value, m_Battery.get(), &DeviceBatteryMould::JSGetCurrentBatteryValue);
  1059. Dispatch->Get.Push(AttrKey::Wifi_Strength_Value, m_Wifi.get(), &DeviceWifiMould::JSGetCurrentSignalValue);
  1060. Dispatch->Get.Push(TempUpperLimit, m_Temperature.get(), &DeviceTemperatureMould::JSGetTemperatureWarningMax);
  1061. Dispatch->Get.Push(TempLowerLimit, m_Temperature.get(), &DeviceTemperatureMould::JSGetTemperatureWarningMin);
  1062. Dispatch->Get.Push(TempMaxLimit, m_Temperature.get(), &DeviceTemperatureMould::JSGetTemperatureErrorMax);
  1063. Dispatch->Get.Push(TempMinLimit, m_Temperature.get(), &DeviceTemperatureMould::JSGetTemperatureErrorMin);
  1064. Dispatch->Get.Push(TemperatureCalibUpWarn, m_Temperature.get(), &DeviceTemperatureMould::JSGetTemperatureCalibWarningMax);
  1065. Dispatch->Get.Push(TemperatureCalibLowWarn, m_Temperature.get(), &DeviceTemperatureMould::JSGetTemperatureCalibWarningMin);
  1066. Dispatch->Get.Push(BatLowerLimit, m_Battery.get(), &DeviceBatteryMould::JSGetBatteryWarningMin);
  1067. Dispatch->Get.Push(BatMiniLimit, m_Battery.get(), &DeviceBatteryMould::JSGetBatteryErrorMin);
  1068. Dispatch->Get.Push(WifiLowerLimit, m_Wifi.get(), &DeviceWifiMould::JSGetSignalWarningMin);
  1069. Dispatch->Get.Push(WifiMiniLimit, m_Wifi.get(), &DeviceWifiMould::JSGetSignalErrorMin);
  1070. //ErrorList
  1071. //Dispatch->Get.Push(nDetail::AttrKey::ErrorList, m_WarnAndError.get(), &FPDErrorWarning::JSGetErrorList);
  1072. Dispatch->Set.Push(TempUpperLimit, m_Temperature.get(), &DeviceTemperatureMould::SetTemperatureWarningMax);
  1073. Dispatch->Set.Push(TempLowerLimit, m_Temperature.get(), &DeviceTemperatureMould::SetTemperatureWarningMin);
  1074. Dispatch->Set.Push(TempMaxLimit, m_Temperature.get(), &DeviceTemperatureMould::SetTemperatureErrorMax);
  1075. Dispatch->Set.Push(TempMinLimit, m_Temperature.get(), &DeviceTemperatureMould::SetTemperatureErrorMin);
  1076. Dispatch->Set.Push(TemperatureCalibUpWarn, m_Temperature.get(), &DeviceTemperatureMould::SetTemperatureCalibWarningMax);
  1077. Dispatch->Set.Push(TemperatureCalibLowWarn, m_Temperature.get(), &DeviceTemperatureMould::SetTemperatureCalibWarningMin);
  1078. Dispatch->Set.Push(BatLowerLimit, m_Battery.get(), &DeviceBatteryMould::SetBatteryWarningMin);
  1079. Dispatch->Set.Push(BatMiniLimit, m_Battery.get(), &DeviceBatteryMould::SetBatteryErrorMin);
  1080. Dispatch->Set.Push(WifiLowerLimit, m_Wifi.get(), &DeviceWifiMould::SetSignalWarningMin);
  1081. Dispatch->Set.Push(WifiMiniLimit, m_Wifi.get(), &DeviceWifiMould::SetSignalErrorMin);
  1082. Dispatch->Update.Push(TempUpperLimit, m_Temperature.get(), &DeviceTemperatureMould::JSUpdateTemperatureWarningMax);
  1083. Dispatch->Update.Push(TempLowerLimit, m_Temperature.get(), &DeviceTemperatureMould::JSUpdateTemperatureWarningMin);
  1084. Dispatch->Update.Push(TempMaxLimit, m_Temperature.get(), &DeviceTemperatureMould::JSUpdateTemperatureErrorMax);
  1085. Dispatch->Update.Push(TempMinLimit, m_Temperature.get(), &DeviceTemperatureMould::JSUpdateTemperatureErrorMin);
  1086. Dispatch->Update.Push(TemperatureCalibUpWarn, m_Temperature.get(), &DeviceTemperatureMould::JSUpdateTemperatureCalibWarningMax);
  1087. Dispatch->Update.Push(TemperatureCalibLowWarn, m_Temperature.get(), &DeviceTemperatureMould::JSUpdateTemperatureCalibWarningMin);
  1088. Dispatch->Update.Push(BatLowerLimit, m_Battery.get(), &DeviceBatteryMould::JSUpdateBatteryWarningMin);
  1089. Dispatch->Update.Push(BatMiniLimit, m_Battery.get(), &DeviceBatteryMould::JSUpdateBatteryErrorMin);
  1090. Dispatch->Update.Push(WifiLowerLimit, m_Wifi.get(), &DeviceWifiMould::JSUpdateSignalWarningMin);
  1091. Dispatch->Update.Push(WifiMiniLimit, m_Wifi.get(), &DeviceWifiMould::JSUpdateSignalErrorMin);
  1092. }
  1093. void nsFPD::FPDDeviceHaoBo::OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel,
  1094. const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
  1095. {
  1096. switch (nEventLevel)
  1097. {
  1098. case EVT_LEVEL_CONFIGURATION:
  1099. {
  1100. OnEventProcessConf(nDetectorID, nEventID, nEventLevel, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
  1101. break;
  1102. }
  1103. case EVT_LEVEL_INFORMATOION:
  1104. {
  1105. OnEventProcessInfo(nDetectorID, nEventID, nEventLevel, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
  1106. break;
  1107. }
  1108. case EVT_LEVEL_STATUS:
  1109. {
  1110. OnEventProcessStatus(nDetectorID, nEventID, nEventLevel, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
  1111. break;
  1112. }
  1113. case EVT_LEVEL_DATA:
  1114. {
  1115. OnEventProcessData(nDetectorID, nEventID, nEventLevel, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
  1116. break;
  1117. }
  1118. case EVT_LEVEL_WARNING:
  1119. {
  1120. OnEventProcessWarning(nDetectorID, nEventID, nEventLevel, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
  1121. break;
  1122. }
  1123. case EVT_LEVEL_ERROR:
  1124. {
  1125. OnEventProcessError(nDetectorID, nEventID, nEventLevel, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
  1126. break;
  1127. }
  1128. default:
  1129. break;
  1130. }
  1131. }
  1132. void nsFPD::FPDDeviceHaoBo::OnEventProcessConf(int nDetectorID, int nEventID, int nEventLevel,
  1133. const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
  1134. {
  1135. switch (nEventID)
  1136. {
  1137. case EVT_CONF_PANEL_SERIAL:
  1138. {
  1139. m_stDeviceConfig.strPanelSerial = pszMsg;
  1140. FINFO("Receive Panel {$} SN {$}", nDetectorID, pszMsg);
  1141. m_DetectorCtrlUnit->SetDetectorID(m_stDeviceConfig.strPanelSerial);
  1142. break;
  1143. }
  1144. case EVT_CONF_RAW_WIDTH:
  1145. {
  1146. if (m_stDeviceConfig.nFullImageWidth != nParam1)
  1147. {
  1148. m_stDeviceConfig.nFullImageWidth = nParam1;
  1149. }
  1150. if (m_nWidth != nParam1)
  1151. {
  1152. m_nWidth = nParam1;
  1153. }
  1154. FINFO("Ratate angle: {$}", m_nAngle);
  1155. if (m_nAngle == 90 || m_nAngle == 270)
  1156. {
  1157. m_AcqUnit->SetFulImageInfo(m_nWidth, m_nHeight, m_nImgBits, false);
  1158. }
  1159. else
  1160. {
  1161. m_AcqUnit->SetFulImageInfo(m_nHeight, m_nWidth, m_nImgBits, false);
  1162. }
  1163. FINFO("Panel {$} m_nWidth:{$}", nDetectorID, m_nWidth);
  1164. break;
  1165. }
  1166. case EVT_CONF_RAW_HIGHT:
  1167. {
  1168. if (m_stDeviceConfig.nFullImageHeight != nParam1)
  1169. {
  1170. m_stDeviceConfig.nFullImageHeight = nParam1;
  1171. }
  1172. if (m_nHeight != nParam1)
  1173. {
  1174. m_nHeight = nParam1;
  1175. }
  1176. FINFO("Ratate angle: {$}", m_nAngle);
  1177. if (m_nAngle == 90 || m_nAngle == 270)
  1178. {
  1179. m_AcqUnit->SetFulImageInfo(m_nWidth, m_nHeight, m_nImgBits, false);
  1180. }
  1181. else
  1182. {
  1183. m_AcqUnit->SetFulImageInfo(m_nHeight, m_nWidth, m_nImgBits, false);
  1184. }
  1185. FINFO("Panel {$} m_nHeight:{$}", nDetectorID, m_nHeight);
  1186. break;
  1187. }
  1188. case EVT_CONF_MAX_IMAGESIZE:
  1189. {
  1190. int nImageSize = nParam1;
  1191. FINFO("Receive image size:{$}", nImageSize);
  1192. if (m_pImgBuffer)
  1193. {
  1194. delete m_pImgBuffer;
  1195. m_pImgBuffer = nullptr;
  1196. }
  1197. m_pImgBuffer = new WORD[nImageSize];
  1198. }
  1199. }
  1200. }
  1201. void nsFPD::FPDDeviceHaoBo::OnEventProcessInfo(int nDetectorID, int nEventID, int nEventLevel,
  1202. const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
  1203. {
  1204. switch (nEventID)
  1205. {
  1206. case EVT_DATA_RAW_IMAGE:
  1207. {
  1208. FINFO("EVT_DATA_RAW_IMAGE");
  1209. FINFO("m_nWidth:{$},m_nHeight:{$}", m_nWidth, m_nHeight);
  1210. //��ʱ���ü�ֵ������Ҫ�ٸ�
  1211. GlobalTime stImgCreateTime = { 0 };
  1212. GetLocalTime(&stImgCreateTime);
  1213. ResDataObject objImageHead, objTemp;
  1214. objTemp.add(SM_IMAGE_TYPE, (int)IMAGE_FULL);
  1215. objTemp.add(SM_IMAGE_BIT, m_nImgBits);
  1216. objTemp.add(SM_IMAGE_TAG, 1);
  1217. objTemp.add(SM_IMAGE_INDEX, 1);
  1218. objTemp.add(SM_IMAGE_YEAR, stImgCreateTime.wYear);
  1219. objTemp.add(SM_IMAGE_MONTH, stImgCreateTime.wMonth);
  1220. objTemp.add(SM_IMAGE_DAY, stImgCreateTime.wDay);
  1221. objTemp.add(SM_IMAGE_HOUR, stImgCreateTime.wHour);
  1222. objTemp.add(SM_IMAGE_MINUTE, stImgCreateTime.wMinute);
  1223. objTemp.add(SM_IMAGE_SEC, stImgCreateTime.wSecond);
  1224. objTemp.add(SM_IMAGE_MILLSEC, stImgCreateTime.wMilliseconds);
  1225. objTemp.add(SM_IMAGE_LSB, "5000");
  1226. objTemp.add(SM_IMAGE_DOSE, m_nSensitivity);
  1227. objTemp.add(SM_IMAGE_PIXELSPACING, m_nPixelSpacing);
  1228. objTemp.add(SM_IMAGE_PIXELREPRESENTATION, "1");
  1229. objTemp.add(SM_IMAGE_FLIP, "No");
  1230. objTemp.add(SM_IMAGE_ORIGINX, "0");
  1231. objTemp.add(SM_IMAGE_ORIGINY, "0");
  1232. objTemp.add(SM_IMAGE_EXI2UGY, m_fFactorEXI2UGY);//������ӵĻ��ᵼ��ImageSave����EXI��ֵΪ0
  1233. m_AcqUnit->RotateImage(m_pImgBuffer, m_nHeight, m_nWidth, m_nAngle);
  1234. if (90 == m_nAngle || 270 == m_nAngle)
  1235. {
  1236. objTemp.add(SM_IMAGE_WIDTH, m_nHeight);
  1237. objTemp.add(SM_IMAGE_HEIGHT, m_nWidth);
  1238. objTemp.add(SM_IMAGE_ROTATION, "Yes");
  1239. }
  1240. else
  1241. {
  1242. objTemp.add(SM_IMAGE_WIDTH, m_nWidth);
  1243. objTemp.add(SM_IMAGE_HEIGHT, m_nHeight);
  1244. objTemp.add(SM_IMAGE_ROTATION, "No");
  1245. }
  1246. objTemp.add("ImagePath", pszMsg);
  1247. objImageHead.add(SM_IMAGE_HEAD, objTemp);
  1248. FINFO("Full image head: {$}", objImageHead.encode());
  1249. RET_STATUS ret = RET_STATUS::RET_FAILED;
  1250. ret = m_AcqUnit->AddFrameWithRawHead(IMAGE_FULL, objImageHead.encode(), m_pImgBuffer, m_nWidth * m_nHeight);
  1251. FINFO("Add image over");
  1252. break;
  1253. }
  1254. default:
  1255. FERROR("Not support this data({$})", nEventID);
  1256. break;
  1257. }
  1258. }
  1259. void nsFPD::FPDDeviceHaoBo::OnEventProcessStatus(int nDetectorID, int nEventID, int nEventLevel,
  1260. const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
  1261. {
  1262. switch (nEventID)
  1263. {
  1264. case EVT_STATUS_PANEL:
  1265. {
  1266. ENUM_PANEL_STATUS ePanelStatus = (ENUM_PANEL_STATUS)nParam1;
  1267. if (PANEL_CLOSE == nParam1)
  1268. {
  1269. FINFO("EVT_STATUS_PANEL PANEL_CLOSE");
  1270. m_bDeviceConnect = false;
  1271. gDriver->m_bDriverConnect = false;
  1272. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_SHUTDOWN));
  1273. m_DetectorCtrlUnit->SetConnectStatus(to_string(PANEL_DISCONNECT_SUCCESS));
  1274. //m_WarnAndError->SendError(ERR_FPD_DISCONNECT, "");
  1275. }
  1276. else if (PANEL_CONNECT == nParam1)
  1277. {
  1278. FINFO("EVT_STATUS_PANEL PANEL_CONNECT");
  1279. gDriver->m_bDriverConnect = true;
  1280. m_bDeviceConnect = true;
  1281. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_WAKEUP));
  1282. m_DetectorCtrlUnit->SetConnectStatus(to_string(PANEL_CONNECT_OK));
  1283. //m_WarnAndError->ClearError(ERR_FPD_DISCONNECT);
  1284. }
  1285. else if (PANEL_STANDBY == nParam1)
  1286. {
  1287. FINFO("EVT_STATUS_PANEL PANEL_STANDBY");
  1288. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_WAKEUP));
  1289. }
  1290. else if (PANEL_READY_EXP == nParam1)
  1291. {
  1292. FINFO("EVT_STATUS_PANEL PANEL_READY_EXP");
  1293. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_STANDBY));
  1294. m_AcqUnit->SetZskkFPDState(to_string(ZSKK_FPD_STATE_READY));
  1295. }
  1296. else if (PANEL_XWINDOW_ON == nParam1) //Xwindow On
  1297. {
  1298. FINFO("EVT_STATUS_PANEL PANEL_XWINDOW_ON");
  1299. m_SyncUnit->XWindowOnNotify();
  1300. }
  1301. else if (PANEL_XWINDOW_OFF == nParam1) // Xwindow Off
  1302. {
  1303. FINFO("EVT_STATUS_PANEL PANEL_XWINDOW_OFF");
  1304. m_SyncUnit->XWindowOffNotify();
  1305. }
  1306. else if (PANEL_START_ACQ == nParam1)
  1307. {
  1308. FINFO("EVT_STATUS_PANEL PANEL_START_ACQ");
  1309. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_ACQ));//PANEL_START_ACQ
  1310. }
  1311. break;
  1312. }
  1313. case EVT_STATUS_CALIBRATIOIN:
  1314. {
  1315. ENUM_PANEL_EVENT_STATE eStatus = (ENUM_PANEL_EVENT_STATE)nParam1;
  1316. switch (eStatus)
  1317. {
  1318. case PANEL_EVENT_START:
  1319. break;
  1320. case PANEL_EVENT_END_OK:
  1321. case PANEL_EVENT_END_ERROR:
  1322. m_DetectorCtrlUnit->SetDetectorStatus(to_string(DETECTOR_STATUS_STANDBY));
  1323. m_CalibUnit->SetCalibrationStatus(to_string(CCOS_CALIBRATION_STATUS_STANDBY));
  1324. m_CalibUnit->SetCalibrationProgress("100");//make progress
  1325. break;
  1326. case PANEL_EVENT_TIMEOUT:
  1327. break;
  1328. default:
  1329. break;
  1330. }
  1331. break;
  1332. }
  1333. case EVT_STATUS_OFFSET:
  1334. {
  1335. ENUM_PANEL_EVENT_STATE eStatus = (ENUM_PANEL_EVENT_STATE)nParam1;
  1336. switch (eStatus)
  1337. {
  1338. case PANEL_EVENT_END_OK:
  1339. m_CalibUnit->SetOffsetStatus("Idle");
  1340. break;
  1341. case PANEL_EVENT_END_ERROR:
  1342. m_CalibUnit->SetOffsetStatus("Error");
  1343. break;
  1344. case PANEL_EVENT_START:
  1345. m_CalibUnit->SetOffsetStatus("Running");
  1346. break;
  1347. default:
  1348. break;
  1349. }
  1350. break;
  1351. }
  1352. case EVT_STATUS_OFFSET_PROGRESS:
  1353. {
  1354. FINFO("EVT_STATUS_OFFSET_PROGRESS param:{$}", nParam1);
  1355. int nOffsetProgress = nParam1;
  1356. m_CalibUnit->SetOffsetProgress(to_string(nOffsetProgress));
  1357. break;
  1358. }
  1359. case EVT_STATUS_TEMPERATURE:
  1360. {
  1361. float fTemperature = fParam2;
  1362. /*if (fTemperature > m_fTemperMaxLimit)
  1363. {
  1364. AddErrMsg("14", "temperature_toohigh");
  1365. }
  1366. else if (fTemperature >= m_fTemperWarning)
  1367. {
  1368. AddWarnMsg("14", "temperature_high");
  1369. }
  1370. else if (fTemperature < m_fTemperMinLimit)
  1371. {
  1372. AddErrMsg("14", "temperature_toolow");
  1373. }
  1374. else if (fTemperature <= m_fTemperLowLimit)
  1375. {
  1376. AddWarnMsg("14", "temperature_low");
  1377. }
  1378. else
  1379. {
  1380. DelErrMsg("14");
  1381. }*/
  1382. //SendTemperatureValue(fTemperature);
  1383. break;
  1384. }
  1385. case EVT_STATUS_WIFI:
  1386. {
  1387. int nWifiLevel = nParam1;
  1388. /*if (nWifiLevel < m_nWifiLimit)
  1389. {
  1390. AddErrMsg("15", "wifi_toolow");
  1391. }
  1392. else if (nWifiLevel <= m_nWifiWarning)
  1393. {
  1394. AddWarnMsg("15", "wifi_low");
  1395. }
  1396. else
  1397. {
  1398. DelErrMsg("15");
  1399. }*/
  1400. //SendWifiValue(nWifiLevel);
  1401. break;
  1402. }
  1403. case EVT_STATUS_BATTERY_VALUE:
  1404. {
  1405. int nBatteryValue = nParam1;
  1406. /*if (nBatteryValue < m_nBatteryLimit)
  1407. {
  1408. AddErrMsg("16", "battery_toolow");
  1409. }
  1410. else if (nBatteryValue <= m_nBatteryWarning)
  1411. {
  1412. AddWarnMsg("16", "battery_low");
  1413. }
  1414. else
  1415. {
  1416. DelErrMsg("16");
  1417. }*/
  1418. //SendBatteryValue(nBatteryValue);
  1419. break;
  1420. }
  1421. default:
  1422. FERROR("Not support this status({$})", nEventID);
  1423. break;
  1424. }
  1425. }
  1426. void nsFPD::FPDDeviceHaoBo::OnEventProcessData(int nDetectorID, int nEventID, int nEventLevel,
  1427. const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
  1428. {
  1429. switch (nEventID)
  1430. {
  1431. case EVT_DATA_RAW_IMAGE:
  1432. {
  1433. FINFO("EVT_DATA_RAW_IMAGE");
  1434. FINFO("m_nWidth:{$},m_nHeight:{$}", m_nWidth, m_nHeight);
  1435. memcpy(m_pImgBuffer, pParam, (size_t)m_nWidth * (size_t)m_nHeight * sizeof(WORD));
  1436. //��ʱ���ü�ֵ������Ҫ�ٸ�
  1437. GlobalTime stImgCreateTime = { 0 };
  1438. GetLocalTime(&stImgCreateTime);
  1439. ResDataObject objImageHead, objTemp;
  1440. objTemp.add(SM_IMAGE_TYPE, (int)IMAGE_FULL);
  1441. objTemp.add(SM_IMAGE_BIT, m_nImgBits);
  1442. objTemp.add(SM_IMAGE_TAG, 1);
  1443. objTemp.add(SM_IMAGE_INDEX, 1);
  1444. objTemp.add(SM_IMAGE_YEAR, stImgCreateTime.wYear);
  1445. objTemp.add(SM_IMAGE_MONTH, stImgCreateTime.wMonth);
  1446. objTemp.add(SM_IMAGE_DAY, stImgCreateTime.wDay);
  1447. objTemp.add(SM_IMAGE_HOUR, stImgCreateTime.wHour);
  1448. objTemp.add(SM_IMAGE_MINUTE, stImgCreateTime.wMinute);
  1449. objTemp.add(SM_IMAGE_SEC, stImgCreateTime.wSecond);
  1450. objTemp.add(SM_IMAGE_MILLSEC, stImgCreateTime.wMilliseconds);
  1451. objTemp.add(SM_IMAGE_LSB, "5000");
  1452. objTemp.add(SM_IMAGE_DOSE, m_nSensitivity);
  1453. objTemp.add(SM_IMAGE_PIXELSPACING, m_nPixelSpacing);
  1454. objTemp.add(SM_IMAGE_PIXELREPRESENTATION, "1");
  1455. objTemp.add(SM_IMAGE_FLIP, "No");
  1456. objTemp.add(SM_IMAGE_ORIGINX, "0");
  1457. objTemp.add(SM_IMAGE_ORIGINY, "0");
  1458. objTemp.add(SM_IMAGE_EXI2UGY, m_fFactorEXI2UGY);//������ӵĻ��ᵼ��ImageSave����EXI��ֵΪ0
  1459. m_AcqUnit->RotateImage(m_pImgBuffer, m_nHeight, m_nWidth, m_nAngle);
  1460. if (90 == m_nAngle || 270 == m_nAngle)
  1461. {
  1462. objTemp.add(SM_IMAGE_WIDTH, m_nHeight);
  1463. objTemp.add(SM_IMAGE_HEIGHT, m_nWidth);
  1464. objTemp.add(SM_IMAGE_ROTATION, "Yes");
  1465. }
  1466. else
  1467. {
  1468. objTemp.add(SM_IMAGE_WIDTH, m_nWidth);
  1469. objTemp.add(SM_IMAGE_HEIGHT, m_nHeight);
  1470. objTemp.add(SM_IMAGE_ROTATION, "No");
  1471. }
  1472. objImageHead.add(SM_IMAGE_HEAD, objTemp);
  1473. FINFO("Full image head: {$}", objImageHead.encode());
  1474. RET_STATUS ret = RET_STATUS::RET_FAILED;
  1475. ret = m_AcqUnit->AddFrameWithRawHead(IMAGE_FULL, objImageHead.encode(), m_pImgBuffer, m_nWidth * m_nHeight);
  1476. FINFO("Add image over");
  1477. break;
  1478. }
  1479. default:
  1480. FERROR("Not support this data({$})", nEventID);
  1481. break;
  1482. }
  1483. }
  1484. void nsFPD::FPDDeviceHaoBo::OnEventProcessError(int nDetectorID, int nEventID, int nEventLevel,
  1485. const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
  1486. {
  1487. switch (nEventID)
  1488. {
  1489. case EVT_ERR_COMMUNICATE:
  1490. //{
  1491. // string strTemp = pszMsg;
  1492. // if (strTemp.find("true") != std::string::npos)
  1493. // {
  1494. // AddErrMsg("0", "communication error");
  1495. // SendTemperatureValue(0);
  1496. // SendWifiValue(0);
  1497. // SendBatteryValue(0);
  1498. // }
  1499. // else if (strTemp.find("false") != std::string::npos)
  1500. // {
  1501. // DelErrMsg("0");
  1502. // }
  1503. //}
  1504. break;
  1505. case EVT_ERR_INIT_FAILED:
  1506. //{
  1507. // string strTemp = pszMsg;
  1508. // if (strTemp.find("true") != std::string::npos)
  1509. // {
  1510. // AddErrMsg("6", "initialize error");
  1511. // }
  1512. // else if (strTemp.find("false") != std::string::npos)
  1513. // {
  1514. // //һ�㲻�ɻָ�
  1515. // }
  1516. //}
  1517. break;
  1518. default:
  1519. FERROR("Not support this error({$})", nEventID);
  1520. break;
  1521. }
  1522. }
  1523. void nsFPD::FPDDeviceHaoBo::OnEventProcessWarning(int nDetectorID, int nEventID, int nEventLevel,
  1524. const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
  1525. {
  1526. FERROR("Not support this warn({$})", nEventID);
  1527. }
  1528. RET_STATUS nsFPD::FPDDeviceHaoBo::StartOffset(bool isAll)
  1529. {
  1530. FINFO("--Func-- StartOffset isAll:{$}", isAll);
  1531. if (isAll)
  1532. {
  1533. m_CalibUnit->SetOffsetCounts(to_string(1));
  1534. g_pDetector->SetFreshAllOffsetEvent();
  1535. }
  1536. else
  1537. {
  1538. m_CalibUnit->SetOffsetCounts(to_string(1));
  1539. g_pDetector->SetfreshOffsetEvent();
  1540. }
  1541. return RET_SUCCEED;
  1542. }
  1543. RET_STATUS nsFPD::FPDDeviceHaoBo::AbortOffset()
  1544. {
  1545. FINFO("--Func-- AbortOffset");
  1546. g_pDetector->AbortFreshOffset();
  1547. return RET_SUCCEED;
  1548. }
  1549. RET_STATUS nsFPD::FPDDeviceHaoBo::UpdateModeInRunning(std::vector<AcqModeInfo>& vAcqModeList)
  1550. {
  1551. FINFO("--Func-- UpdateModeInRunning");
  1552. m_vAcqModeInfoList.assign(vAcqModeList.begin(),vAcqModeList.end());
  1553. for (size_t i = 0; i < m_vAcqModeInfoList.size(); i++)
  1554. {
  1555. if (m_vAcqModeInfoList[i].fFrequency == m_fCurrentPPS)
  1556. {
  1557. g_pDetector->UpdateModeInRunning(m_vAcqModeInfoList[i].nModeID, m_vAcqModeInfoList[i].fFrequency);
  1558. break;
  1559. }
  1560. }
  1561. return RET_SUCCEED;
  1562. }
  1563. /***
  1564. * �ͻ��˻�ȡ̽������Ϣ
  1565. ***/
  1566. RET_STATUS nsFPD::FPDDeviceHaoBo::GetDetectorInfo(string& strInfo)
  1567. {
  1568. FINFO("--Func-- GetDetectorInfo");
  1569. ResDataObject strDetectorInfo;
  1570. if (m_stDeviceConfig.strPanelSerial == "")
  1571. {
  1572. FWARN("strPanelSerial is null, Send Default Info");
  1573. strDetectorInfo.add("DetectorName", "Simulator");
  1574. strDetectorInfo.add("DetectorSN", "Simulator");
  1575. strDetectorInfo.add("SSID", " ");
  1576. strDetectorInfo.add("LifeTime", "0");
  1577. strDetectorInfo.add("PowerOn", "0");
  1578. strDetectorInfo.add("DateCode", " ");
  1579. strDetectorInfo.add("PartNumber", " ");
  1580. strDetectorInfo.add("WifiDataRate", " ");
  1581. strDetectorInfo.add("WifiChannel", "0");
  1582. strDetectorInfo.add("DetectorExist", "0");
  1583. strDetectorInfo.add("SystemAS", "0");
  1584. strDetectorInfo.add("CalibrationDate", "0");
  1585. strDetectorInfo.add("CalibrationDue", "0");
  1586. strDetectorInfo.add("CalibrationExist", "0");
  1587. strDetectorInfo.add("CommunicationStatus", "0");
  1588. strDetectorInfo.add("DetectorTemperature", "0");
  1589. strDetectorInfo.add("FDCalibrationTemperature", "0");
  1590. strDetectorInfo.add("TemperatureStatus", "0");
  1591. strDetectorInfo.add("WaitTime", "0");
  1592. strDetectorInfo.add("DetectorWifiSignal", "0");
  1593. strDetectorInfo.add("DetectorBattery", "0");
  1594. strDetectorInfo.add("ShockSensor", "NULL");
  1595. strDetectorInfo.add("FirmwareUpdate", "0");
  1596. strInfo = strDetectorInfo.encode();
  1597. return RET_STATUS::RET_SUCCEED;
  1598. }
  1599. strDetectorInfo.add("DetectorName", m_stDeviceConfig.strDeviceName.c_str());
  1600. strDetectorInfo.add("DetectorSN", m_stDeviceConfig.strPanelSerial.c_str());
  1601. //strDetectorInfo.add("Firmware", m_stDeviceConfig.strFirmware.c_str());
  1602. //strDetectorInfo.add("APFirmware", "NULL");
  1603. //strDetectorInfo.add("Software", m_stDeviceConfig.strSoftware.c_str());
  1604. //strDetectorInfo.add("SSID", m_stDeviceConfig.strWifiSSID.c_str());
  1605. //strDetectorInfo.add("LifeTime", m_stDeviceConfig.nLifeTime);
  1606. //strDetectorInfo.add("PowerOn", m_stDeviceConfig.nPowerOn);
  1607. //strDetectorInfo.add("FD_Voltage_List1", m_strVoltage.c_str());
  1608. //strDetectorInfo.add("DateCode", m_stDeviceConfig.strDateCode.c_str());
  1609. //strDetectorInfo.add("PartNumber", m_stDeviceConfig.strPartNumber.c_str());
  1610. //strDetectorInfo.add("WifiDataRate", m_stDeviceConfig.nWifiDataRate);
  1611. //strDetectorInfo.add("WifiChannel", m_stDeviceConfig.nWifiChannel);
  1612. //strDetectorInfo.add("DetectorExist", m_stDeviceConfig.bExisted);
  1613. //strDetectorInfo.add("SystemAS", m_stDeviceConfig.pDetModeInfoStruct[0].nWorkStation);
  1614. strInfo = strDetectorInfo.encode();
  1615. return RET_STATUS::RET_SUCCEED;
  1616. }
  1617. RET_STATUS nsFPD::FPDDeviceHaoBo::FaultInjection(string strErrorCode)
  1618. {
  1619. //m_WarnAndError->SendError(strErrorCode, "");
  1620. return RET_STATUS::RET_SUCCEED;
  1621. }
  1622. RET_STATUS nsFPD::FPDDeviceHaoBo::EliminateFault(string strErrorCode)
  1623. {
  1624. //m_WarnAndError->ClearError(strErrorCode);
  1625. return RET_STATUS::RET_SUCCEED;
  1626. }