CDetectorDlg.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. // CDetectorDlg.cpp: 实现文件
  2. //
  3. #include "pch.h"
  4. #include "resource.h" // 主符号
  5. #include "CDetectorDlg.h"
  6. #include "afxdialogex.h"
  7. #include "CImageViewDlg.h"
  8. #include "CConfigDlg.h"
  9. using namespace placeholders;
  10. #define MSG_IMAGE_NOTIFY (WM_USER+111)
  11. // CDetectorDlg 对话框
  12. IMPLEMENT_DYNAMIC(CDetectorDlg, CDiosBasicDlg)
  13. CDetectorDlg::CDetectorDlg(CWnd* pParent /*=nullptr*/)
  14. : CDiosBasicDlg(Dev_Detector, IDD_DIALOG5, pParent)
  15. {
  16. }
  17. CDetectorDlg::~CDetectorDlg()
  18. {
  19. }
  20. void CDetectorDlg::DoDataExchange(CDataExchange* pDX)
  21. {
  22. CDialogEx::DoDataExchange(pDX);
  23. DDX_Control(pDX, IDC_EDIT1, m_EditDetectorID);
  24. DDX_Control(pDX, IDC_EDIT2, m_EditAcqMode);
  25. DDX_Control(pDX, IDC_EDIT3, m_EditSyncMode);
  26. DDX_Control(pDX, IDC_EDIT4, m_EditXWinSize);
  27. //DDX_Text(pDX, IDC_EDIT1, m_nDetectorID);
  28. //DDV_MinMaxUInt(pDX, m_nDetectorID, 0, 5);
  29. //DDX_Text(pDX, IDC_EDIT2, m_nAcqMode);
  30. //DDV_MinMaxUInt(pDX, m_nAcqMode, 0, 5);
  31. //DDX_Text(pDX, IDC_EDIT3, m_nSyncMode);
  32. //DDV_MinMaxUInt(pDX, m_nSyncMode, 0, 5);
  33. //DDX_Text(pDX, IDC_EDIT4, m_nXWindowSize);
  34. DDX_Control(pDX, IDC_EDIT5, m_EditDetectorType);
  35. DDX_Control(pDX, IDC_EDIT6, m_EditConnection);
  36. DDX_Control(pDX, IDC_EDIT7, m_EditBattery);
  37. DDX_Control(pDX, IDC_EDIT8, m_EditWifi);
  38. DDX_Control(pDX, IDC_EDIT9, m_EditTemperature);
  39. DDX_Control(pDX, IDC_EDIT10, m_EditDetectorStatus);
  40. DDX_Control(pDX, IDC_EDIT11, m_EditXwindowStatus);
  41. DDX_Control(pDX, IDC_EDIT12, m_EditExpTime);
  42. DDX_Control(pDX, IDC_EDIT13, m_EditStartMode);
  43. }
  44. BEGIN_MESSAGE_MAP(CDetectorDlg, CDialogEx)
  45. ON_MESSAGE(MSG_IMAGE_NOTIFY, ShowRawImage)
  46. ON_BN_CLICKED(IDC_BUTTON3, &CDetectorDlg::OnBnClickedButton3)
  47. ON_BN_CLICKED(IDC_BUTTON1, &CDetectorDlg::OnBnClickedButton1)
  48. ON_BN_CLICKED(IDC_BUTTON2, &CDetectorDlg::OnBnClickedButton2)
  49. ON_BN_CLICKED(IDC_BUTTON4, &CDetectorDlg::OnBnClickedButton4)
  50. ON_BN_CLICKED(IDC_BUTTON12, &CDetectorDlg::OnBnClickedButton12)
  51. ON_BN_CLICKED(IDC_BUTTON5, &CDetectorDlg::OnBnClickedButton5)
  52. ON_BN_CLICKED(IDC_BUTTON6, &CDetectorDlg::OnBnClickedButton6)
  53. ON_BN_CLICKED(IDC_BUTTON7, &CDetectorDlg::OnBnClickedButton7)
  54. ON_BN_CLICKED(IDC_BUTTON8, &CDetectorDlg::OnBnClickedButton8)
  55. ON_BN_CLICKED(IDC_BUTTON9, &CDetectorDlg::OnBnClickedButton9)
  56. ON_BN_CLICKED(IDC_BUTTON10, &CDetectorDlg::OnBnClickedButton10)
  57. ON_BN_CLICKED(IDC_BUTTON11, &CDetectorDlg::OnBnClickedButton11)
  58. ON_EN_KILLFOCUS(IDC_EDIT1, &CDetectorDlg::OnEnKillfocusEdit1)
  59. ON_EN_KILLFOCUS(IDC_EDIT2, &CDetectorDlg::OnEnKillfocusEdit2)
  60. ON_EN_KILLFOCUS(IDC_EDIT3, &CDetectorDlg::OnEnKillfocusEdit3)
  61. ON_EN_KILLFOCUS(IDC_EDIT4, &CDetectorDlg::OnEnKillfocusEdit4)
  62. ON_EN_KILLFOCUS(IDC_EDIT12, &CDetectorDlg::OnEnKillfocusEdit12)
  63. END_MESSAGE_MAP()
  64. // CDetectorDlg 消息处理程序
  65. //初始化配置
  66. BOOL CDetectorDlg::OnInitDialog()
  67. {
  68. CDiosBasicDlg::OnInitDialog();
  69. return TRUE;
  70. }
  71. //设备初始化
  72. bool CDetectorDlg::AppInitial(bool act)
  73. {
  74. CreatMode(act);
  75. m_CurrentDev = CDeviceSET::GetInstance()->m_CDeviceMap.find(Dev_Detector);
  76. CString log;
  77. try
  78. {
  79. if (act)
  80. {
  81. if (nullptr != m_pDevice)
  82. {
  83. m_pDevice->EventCenter->OnDataNotify.Push(bind(&CDetectorDlg::OnDataNotify, this, _1, _2, _3, _4, _5, _6));
  84. m_pDevice->EventCenter->OnMaxBlockSize.Push(bind(&CDetectorDlg::OnMaxBlockSize, this, _1, _2, _3, _4, _5));
  85. }
  86. else
  87. {
  88. mLog::Debug("(FPD)- FPDDevice not Create");
  89. }
  90. }
  91. }
  92. catch (const ResDataObjectExption&)
  93. {
  94. log.Format("(FPD)- open FPD file failed");
  95. mLog::Error(log);
  96. ToolsDlgLog(log);
  97. return false;
  98. }
  99. catch (...)
  100. {
  101. log.Format("(FPD)- FPD AppInitial failed");
  102. mLog::Error(log);
  103. ToolsDlgLog(log);
  104. return false;
  105. }
  106. return true;
  107. }
  108. //获取初始值
  109. bool CDetectorDlg::GetInitData()
  110. {
  111. CString log;
  112. CString tempStr;
  113. string strTempValue;
  114. if (m_pDevice != nullptr)
  115. {
  116. //xxxxxxxxxxxx = atoi(DevGetValue(Dev_Detector, nsFPD::AttrKey::DetectorType).c_str());
  117. //tempStr.Format("%d", xxxxxxxx);
  118. //xxxxxxx.SetWindowText(tempStr);
  119. }
  120. return true;
  121. }
  122. //设置消息对照表
  123. void CDetectorDlg::SetMagMap()
  124. {
  125. auto HW_UNKNOWN = [this](int NotifyCode, string key, string context)
  126. {
  127. CString strNotify;
  128. strNotify.Format("(FPD)- FPD can not deal with Attribute[%s] \n", key.c_str());
  129. ToolsDlgLog(strNotify);
  130. };
  131. auto HW_Battery = [this](int NotifyCode, string key, string context)//Battery
  132. {
  133. m_EditBattery.SetWindowText(context.c_str());
  134. };
  135. auto HW_Wifi = [this](int NotifyCode, string key, string context)//Wifi
  136. {
  137. m_EditWifi.SetWindowText(context.c_str());
  138. };
  139. auto HW_Temperature = [this](int NotifyCode, string key, string context)//Temperature
  140. {
  141. m_EditTemperature.SetWindowText(context.c_str());
  142. };
  143. auto HW_DetectorStatus = [this](int NotifyCode, string key, string context)//DetectorStatus
  144. {
  145. m_EditDetectorStatus.SetWindowText(context.c_str());
  146. };
  147. auto HW_XwindowStatus = [this](int NotifyCode, string key, string context)//XwindowStatus
  148. {
  149. m_EditXwindowStatus.SetWindowText(context.c_str());
  150. };
  151. //Detector
  152. m_mapFrame["UnKnown"] = tFrameMapItem(HW_UNKNOWN);
  153. m_mapFrame[nsFPD::AttrKey::Remain_Power_Value] = tFrameMapItem(HW_Battery);
  154. m_mapFrame[nsFPD::AttrKey::Wifi_Strength_Value] = tFrameMapItem(HW_Wifi);
  155. m_mapFrame[nsFPD::AttrKey::Temperature_Value] = tFrameMapItem(HW_Temperature);
  156. m_mapFrame[nsFPD::AttrKey::DetectorStatus] = tFrameMapItem(HW_DetectorStatus);
  157. m_mapFrame[nsFPD::AttrKey::XwindowStatus] = tFrameMapItem(HW_XwindowStatus);
  158. }
  159. void CDetectorDlg::OnDataNotify(CDetectorDlg* pThis, int nCode, string key, string ctx, string strHeader, char* buf, int len)
  160. {
  161. if (pThis != nullptr)
  162. {
  163. if (pThis->m_pImage == NULL)
  164. {
  165. pThis->m_pImage = new WORD[len];
  166. pThis->m_nImageBytes = len;
  167. }
  168. else if (pThis->m_nImageBytes < len)
  169. {
  170. delete[] pThis->m_pImage;
  171. pThis->m_pImage = new WORD[len];
  172. pThis->m_nImageBytes = len;
  173. }
  174. memcpy(pThis->m_pImage, buf, len);
  175. if (key == nsFPD::AttrKey::ImgDataInfo)
  176. {
  177. ResDataObject rdoInfo;
  178. try
  179. {
  180. if (rdoInfo.decode(ctx.c_str()))
  181. {
  182. pThis->m_nImageW = rdoInfo["Width"];
  183. pThis->m_nImageH = rdoInfo["Height"];
  184. }
  185. }
  186. catch (...)
  187. {
  188. ToolsDlgMSG("FPDError", "nDataNotify ResDataObjectExption");
  189. }
  190. }
  191. CString strMsg;
  192. strMsg.Format("%d, %s :%s, buf=0x%p len=%i\n", nCode, key.c_str(), ctx.c_str(), buf, len);
  193. ToolsDlgMSG("OnDataNotify", strMsg);
  194. ::PostMessage(pThis->GetSafeHwnd(), MSG_IMAGE_NOTIFY, 0, 0);
  195. }
  196. }
  197. void CDetectorDlg::OnMaxBlockSize(CDetectorDlg* pThis, string str, DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4)
  198. {
  199. CString strMsg;
  200. if (pThis != nullptr)
  201. {
  202. strMsg.Format("%s, %i, %i, %i, %i", str.c_str(), dw1, dw2, dw3, dw4);
  203. ToolsDlgMSG("OnMaxBlockSize", strMsg);
  204. }
  205. }
  206. void CDetectorDlg::InitPageElements(bool act)
  207. {
  208. if (act)
  209. {
  210. ShowPageElements(FALSE, TRUE, FALSE, FALSE);
  211. SetMagMap();
  212. GetInitData();
  213. }
  214. else
  215. {
  216. ShowPageElements(TRUE, FALSE, TRUE, FALSE);
  217. }
  218. }
  219. //设置窗口元素显示
  220. void CDetectorDlg::ShowPageElements(bool init, bool exit, bool cfg, bool general)
  221. {
  222. __super::ShowPageElements(init, exit, cfg, general);
  223. bool temp = exit;
  224. //EnterExam
  225. GetDlgItem(IDC_BUTTON4)->EnableWindow(temp);
  226. //ExitExam
  227. GetDlgItem(IDC_BUTTON12)->EnableWindow(temp);
  228. //ActiveFPD
  229. GetDlgItem(IDC_BUTTON5)->EnableWindow(temp);
  230. GetDlgItem(IDC_EDIT1)->EnableWindow(temp);
  231. //SetAcqMode
  232. GetDlgItem(IDC_BUTTON6)->EnableWindow(temp);
  233. GetDlgItem(IDC_EDIT2)->EnableWindow(temp);
  234. //SetSyncMode
  235. GetDlgItem(IDC_BUTTON7)->EnableWindow(temp);
  236. GetDlgItem(IDC_EDIT3)->EnableWindow(temp);
  237. //SetXWinSize
  238. GetDlgItem(IDC_BUTTON8)->EnableWindow(temp);
  239. GetDlgItem(IDC_EDIT4)->EnableWindow(temp);
  240. //PrepareAcq
  241. GetDlgItem(IDC_BUTTON9)->EnableWindow(temp);
  242. //StartAcq
  243. GetDlgItem(IDC_BUTTON10)->EnableWindow(temp);
  244. //StopAcq
  245. GetDlgItem(IDC_BUTTON11)->EnableWindow(temp);
  246. //EnterExam
  247. GetDlgItem(IDC_EDIT5)->EnableWindow(temp);
  248. //EnterExam
  249. GetDlgItem(IDC_EDIT6)->EnableWindow(temp);
  250. //EnterExam
  251. GetDlgItem(IDC_EDIT7)->EnableWindow(temp);
  252. //EnterExam
  253. GetDlgItem(IDC_EDIT8)->EnableWindow(temp);
  254. //EnterExam
  255. GetDlgItem(IDC_EDIT9)->EnableWindow(temp);
  256. //SetXWinSize
  257. GetDlgItem(IDC_BUTTON13)->EnableWindow(temp);
  258. GetDlgItem(IDC_EDIT12)->EnableWindow(temp);
  259. }
  260. //选择配置
  261. void CDetectorDlg::OnBnClickedButton3()
  262. {
  263. CString log;
  264. nsCFG::CConfigDlg dlgcfg(Dev_Detector,
  265. m_strCfgLib,
  266. m_strCfgFile);
  267. dlgcfg.DoModal();
  268. if (m_strCfgFile.empty())
  269. {
  270. log.Format("(FPD)- FPD m_strCfgFile is empty");
  271. mLog::Warn(log);
  272. ToolsDlgLog(log);
  273. }
  274. else
  275. {
  276. ShowPageElements(TRUE, FALSE, TRUE, FALSE);
  277. }
  278. }
  279. //初始化
  280. void CDetectorDlg::OnBnClickedButton1()
  281. {
  282. CString log;
  283. if (m_pDriver == nullptr)
  284. if (!m_pDevice)
  285. {
  286. if (AppInitial(true))
  287. {
  288. ShowPageElements(FALSE, TRUE, FALSE, FALSE);
  289. SetMagMap();
  290. GetInitData();
  291. mLog::Debug("(FPD)- FPD Initial success");
  292. }
  293. else
  294. {
  295. log.Format("(FPD)- FPD Initial fail");
  296. mLog::Error(log);
  297. ToolsDlgLog(log);
  298. }
  299. }
  300. else
  301. {
  302. log.Format("(FPD)- m_pDevice not empty");
  303. mLog::Warn(log);
  304. ToolsDlgLog(log);
  305. }
  306. else
  307. {
  308. log.Format("(FPD)- m_pDriver not empty");
  309. mLog::Warn(log);
  310. ToolsDlgLog(log);
  311. }
  312. }
  313. //退出
  314. void CDetectorDlg::OnBnClickedButton2()
  315. {
  316. if (AppInitial(false))
  317. {
  318. ShowPageElements(TRUE, FALSE, TRUE, FALSE);
  319. }
  320. }
  321. //调用图片显示窗口
  322. LRESULT CDetectorDlg::ShowRawImage(WPARAM wParam, LPARAM lParam)
  323. {
  324. CImageViewDlg dlgImage;
  325. dlgImage.m_nwidth = m_nImageW;
  326. dlgImage.m_nheight = m_nImageH;
  327. dlgImage.m_pdata = new unsigned short[dlgImage.m_nwidth * dlgImage.m_nheight];
  328. for (int i = 0; i < dlgImage.m_nwidth * dlgImage.m_nheight; ++i)
  329. {
  330. dlgImage.m_pdata[i] = m_pImage[i];
  331. }
  332. dlgImage.DoModal();
  333. //dlgImage.ShowWindow(SW_SHOW);
  334. delete[] dlgImage.m_pdata;
  335. return 0;
  336. }
  337. //EnterExam
  338. void CDetectorDlg::OnBnClickedButton4()
  339. {
  340. DevActionValue(nsFPD::ActionKey::EnterExam, { to_string(1) });
  341. }
  342. //ActiveFPD
  343. void CDetectorDlg::OnBnClickedButton5()
  344. {
  345. DevActionValue(nsFPD::ActionKey::DiosActiveDetector, { to_string(m_nDetectorID) });
  346. }
  347. //SetAcqMode
  348. void CDetectorDlg::OnBnClickedButton6()
  349. {
  350. char data[20]{ 0 };
  351. strncpy_s(data, m_strAcqMode.c_str(), 19);
  352. DevActionValue(nsFPD::ActionKey::SetAcqMode, { data });
  353. }
  354. //SetSyncMode
  355. void CDetectorDlg::OnBnClickedButton7()
  356. {
  357. DevActionValue(nsFPD::ActionKey::SetSyncMode, { to_string(m_nSyncMode) });
  358. }
  359. //SetXWinSize
  360. void CDetectorDlg::OnBnClickedButton8()
  361. {
  362. DevActionValue(nsFPD::ActionKey::SetXwindowSize, { to_string(m_nXWindowSize) });
  363. }
  364. //PrepareAcq
  365. void CDetectorDlg::OnBnClickedButton9()
  366. {
  367. DevAction(nsFPD::ActionKey::PrepareAcquisition);
  368. }
  369. //StartAcq
  370. void CDetectorDlg::OnBnClickedButton10()
  371. {
  372. //DevAction(nsFPD::ActionKey::StartAcquisition);
  373. char data[20]{ 0 };
  374. strncpy_s(data, m_strStartMode.c_str(), 19);
  375. DevActionValue(nsFPD::ActionKey::StartAcquisition, { data });
  376. }
  377. //StopAcq
  378. void CDetectorDlg::OnBnClickedButton11()
  379. {
  380. DevAction(nsFPD::ActionKey::StopAcquisition);
  381. }
  382. //ExitExam
  383. void CDetectorDlg::OnBnClickedButton12()
  384. {
  385. DevActionValue(nsFPD::ActionKey::EnterExam, { to_string(2) });
  386. }
  387. //SetExpTime
  388. void CDetectorDlg::OnBnClickedButton13()
  389. {
  390. DevActionValue(nsFPD::ActionKey::SetExposureTimes, { to_string(m_nExpTime) });
  391. }
  392. //DetectorID_Value
  393. void CDetectorDlg::OnEnKillfocusEdit1()
  394. {
  395. CString tempStr;
  396. m_EditDetectorID.GetWindowText(tempStr);
  397. m_nDetectorID = atoi(tempStr);
  398. }
  399. //AcqMode_Value
  400. void CDetectorDlg::OnEnKillfocusEdit2()
  401. {
  402. CString tempStr;
  403. m_EditAcqMode.GetWindowText(tempStr);
  404. m_strAcqMode = tempStr;
  405. }
  406. //SyncMode_Value
  407. void CDetectorDlg::OnEnKillfocusEdit3()
  408. {
  409. CString tempStr;
  410. m_EditSyncMode.GetWindowText(tempStr);
  411. m_nSyncMode = atoi(tempStr);
  412. }
  413. //XWinSize_Value
  414. void CDetectorDlg::OnEnKillfocusEdit4()
  415. {
  416. CString tempStr;
  417. m_EditXWinSize.GetWindowText(tempStr);
  418. m_nXWindowSize = atoi(tempStr);
  419. }
  420. //XWinSize_Value
  421. void CDetectorDlg::OnEnKillfocusEdit12()
  422. {
  423. CString tempStr;
  424. m_EditExpTime.GetWindowText(tempStr);
  425. m_nExpTime = atoi(tempStr);
  426. }
  427. //StartMode_Value
  428. void CDetectorDlg::OnEnKillfocusEdit13()
  429. {
  430. CString tempStr;
  431. m_EditStartMode.GetWindowText(tempStr);
  432. m_strStartMode = tempStr;
  433. }