You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

975 lines
44 KiB

2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. #include "mainwindow.h"
  2. #include <QDateTime>
  3. #include <QMessageBox>
  4. #include <QtConcurrent>
  5. #include <QtSerialPort/QSerialPort>
  6. #include <QtSerialPort/QSerialPortInfo>
  7. #include "./ui_mainwindow.h"
  8. #include "camera_light_src_timing_controller/qt_serial_datachannel.hpp"
  9. #include "logger.hpp"
  10. #include "version.h"
  11. using namespace iflytop;
  12. using namespace clst;
  13. using namespace std;
  14. static MainWindow *m_mainWindow;
  15. static CLSTControler *m_clstc;
  16. QTimer *timer0;
  17. QTimer *timer1;
  18. QTimer *timer2;
  19. QTimer *timer3;
  20. QTimer *checkConnectTimer0;
  21. static bool m_connected = false;
  22. ZQThread *m_zqthread;
  23. #define TAG "MainWindow"
  24. static const char *fmt(const char *fmt, ...) {
  25. va_list args;
  26. va_start(args, fmt);
  27. static char buf[1024] = {0};
  28. vsnprintf(buf, sizeof(buf), fmt, args);
  29. va_end(args);
  30. return buf;
  31. }
  32. static const uint32_t str2int(QString str) {
  33. // 如果0x开头,??16进制转换
  34. // 如果0b开头,??2进制转换
  35. // 否则??10进制转换
  36. // 去除掉str中_
  37. str.remove("_");
  38. if (str.startsWith("0x")) {
  39. return str.toUInt(nullptr, 16);
  40. } else if (str.startsWith("0b")) {
  41. // remove 0b
  42. str.remove(0, 2);
  43. return str.toUInt(nullptr, 2);
  44. } else {
  45. return str.toUInt(nullptr, 10);
  46. }
  47. }
  48. // static QSerialPort G_SerialPort;
  49. // static QThread G_SerialPortThread;
  50. static QTDataChannel G_QTDataChannel;
  51. static const QString zaferror_to_str(zaf_error_code_t value) {
  52. if (value == kaf_ec_overtime) {
  53. return "通信超时";
  54. } else if (value == kaf_ec_device_notopen) {
  55. return "设备未打开";
  56. } else {
  57. return "未知错误";
  58. }
  59. }
  60. #if 1
  61. #define DO_NO_RET(action) \
  62. { \
  63. zaf_error_code_t ecode = action; \
  64. if (ecode != kaf_ec_success) { \
  65. dumpLog("do %s fail,%s", #action, zaferror_to_str(ecode).toStdString().c_str()); \
  66. displayInfo(false, zaferror_to_str(ecode)); \
  67. return; \
  68. } \
  69. }
  70. #endif
  71. #define DO_NO_RET_AND_NOLOG(action) \
  72. { \
  73. zaf_error_code_t ecode = action; \
  74. if (ecode != kaf_ec_success) { \
  75. return; \
  76. } \
  77. }
  78. #define DO(action) \
  79. { \
  80. zaf_error_code_t ecode = action; \
  81. if (ecode != kaf_ec_success) { \
  82. dumpLog("do %s fail,%s", #action, zaferror_to_str(ecode).toStdString().c_str()); \
  83. displayInfo(false, zaferror_to_str(ecode)); \
  84. return ecode; \
  85. } \
  86. }
  87. void MainWindow::log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
  88. // QString text;
  89. // text.append(msg);
  90. }
  91. // void MainWindow::append_log_slot(QString text) { ui->logbrowser->append(text); }
  92. void MainWindow::doinui_slot(QFunction func) {
  93. if (func.get()) func.get()();
  94. }
  95. zaf_error_code_t MainWindow::updatePage() {
  96. {
  97. float Freq;
  98. uint32_t PluseCnt;
  99. uint32_t SeqCtrlPluseCntMax;
  100. Freq = ui->InterClk_Freq_Text->text().toFloat();
  101. PluseCnt = ui->InterClk_PluseCnt_Text->text().toUInt();
  102. SeqCtrlPluseCntMax = ui->InterClk_SeqCtrlPluseCntMax_Text->text().toUInt();
  103. DO(m_clstc->InterClk_setFreq(Freq));
  104. DO(m_clstc->InterClk_setPluseCnt(PluseCnt));
  105. DO(m_clstc->InterClk_setSeqCtrlPluseCntMax(SeqCtrlPluseCntMax));
  106. }
  107. {
  108. ExtTriggerSrcType src;
  109. SigProcessMode mode;
  110. TriggerEdge edge;
  111. uint32_t coefficient;
  112. uint32_t bias;
  113. uint32_t division;
  114. uint32_t multiplication;
  115. uint32_t cnt;
  116. // TriInX_setSequentialControlPluseCntMax
  117. #define UPDATE(index) \
  118. src = ExtTriggerSrcType(ui->TriInX_SrcSelect_Val_##index->currentText().toStdString()); \
  119. coefficient = ui->TriInX_FileterCoefficient_Val_##index->text().toUInt(); \
  120. bias = ui->TriInX_FreqDetectBias_Val_##index->text().toUInt(); \
  121. mode = SigProcessMode(ui->TriInX_Mode_Val_##index->currentText().toStdString()); \
  122. edge = TriggerEdge(ui->TriInX_TriggerModeTriggerEdge_Val_##index->currentText().toStdString()); \
  123. division = ui->TriInX_TriggerModeFreqDivision_Val_##index->text().toUInt(); \
  124. multiplication = ui->TriInX_TriggerModeFreqMultiplication_Val_##index->text().toUInt(); \
  125. cnt = ui->TriInX_SequentialControlPluseCntMax_Val_##index->text().toUInt(); \
  126. DO(m_clstc->TriInX_setSrcSelect(index, src)); \
  127. DO(m_clstc->TriInX_setFileterCoefficient(index, coefficient)); \
  128. DO(m_clstc->TriInX_setFreqDetectBias(index, bias)); \
  129. DO(m_clstc->TriInX_setMode(index, mode)); \
  130. DO(m_clstc->TriInX_setTriggerModeTriggerEdge(index, edge)); \
  131. DO(m_clstc->TriInX_setTriggerModeFreqDivision(index, division)); \
  132. DO(m_clstc->TriInX_setTriggerModeFreqMultiplication(index, multiplication)); \
  133. DO(m_clstc->TriInX_setSequentialControlPluseCntMax(index, cnt));
  134. UPDATE(1);
  135. UPDATE(2);
  136. UPDATE(3);
  137. UPDATE(4);
  138. #undef UPDATE
  139. }
  140. {
  141. InternalSig src;
  142. uint32_t width;
  143. uint32_t offset;
  144. float duty;
  145. float freq;
  146. #define UPDATE(index) \
  147. src = InternalSig(ui->LightSrcX_TriSrc_##index->currentText().toStdString()); \
  148. width = ui->LightSrcX_TriggerModePluseWidth_##index->text().toUInt(); \
  149. offset = ui->LightSrcX_TriggerModeFirstPluseOffset_##index->text().toUInt(); \
  150. duty = ui->LightSrcX_LightIntensityDuty_##index->text().toFloat(); \
  151. freq = ui->LightSrcX_LightDriverFreq_##index->text().toFloat(); \
  152. DO(m_clstc->LightSrcX_setTriSrc(index, src)); \
  153. DO(m_clstc->LightSrcX_setTriggerModePluseWidth(index, width)); \
  154. DO(m_clstc->LightSrcX_setTriggerModeFirstPluseOffset(index, offset)); \
  155. DO(m_clstc->LightSrcX_setLightIntensityDuty(index, duty)); \
  156. DO(m_clstc->LightSrcX_setLightDriverFreq(index, freq));
  157. UPDATE(1);
  158. UPDATE(2);
  159. UPDATE(3);
  160. UPDATE(4);
  161. #undef UPDATE
  162. }
  163. {
  164. SigProcessMode mode;
  165. uint32_t offset;
  166. uint32_t bindstate1;
  167. uint32_t bindstate2;
  168. uint32_t bindstate3;
  169. uint32_t bindstate4;
  170. InternalSig sig;
  171. uint32_t reversal;
  172. #define UPDATE(index) \
  173. mode = SigProcessMode(ui->ShutterX_OutputCtrlMode_##index->currentText().toStdString()); \
  174. offset = ui->ShutterX_LtEnOffset_##index->text().toUInt(); \
  175. bindstate1 = ui->ShutterX_LtEnBind_val1_##index->checkState() == Qt::CheckState::Checked; \
  176. bindstate2 = ui->ShutterX_LtEnBind_val2_##index->checkState() == Qt::CheckState::Checked; \
  177. bindstate3 = ui->ShutterX_LtEnBind_val3_##index->checkState() == Qt::CheckState::Checked; \
  178. bindstate4 = ui->ShutterX_LtEnBind_val4_##index->checkState() == Qt::CheckState::Checked; \
  179. sig = InternalSig(ui->ShutterX_InSigSelect_##index->currentText().toStdString()); \
  180. reversal = ui->ShutterX_OutPolarityReversal_##index->checkState() == Qt::CheckState::Checked; \
  181. DO(m_clstc->ShutterX_setOutputCtrlMode(index, mode)); \
  182. DO(m_clstc->ShutterX_setLtEnOffset(index, offset)); \
  183. DO(m_clstc->ShutterX_setLtEnBind(index, 1, bindstate1)); \
  184. DO(m_clstc->ShutterX_setLtEnBind(index, 2, bindstate2)); \
  185. DO(m_clstc->ShutterX_setLtEnBind(index, 3, bindstate3)); \
  186. DO(m_clstc->ShutterX_setLtEnBind(index, 4, bindstate4)); \
  187. DO(m_clstc->ShutterX_setInSigSelect(index, sig)); \
  188. DO(m_clstc->ShutterX_setOutPolarityReversal(index, reversal));
  189. UPDATE(1);
  190. UPDATE(2);
  191. UPDATE(3);
  192. UPDATE(4);
  193. #undef UPDATE
  194. }
  195. return kaf_ec_success;
  196. }
  197. void MainWindow::refreshReadonlyPage0() {
  198. zaf_error_code_t ecode;
  199. if (!G_QTDataChannel.isOpen()) {
  200. return;
  201. }
  202. {
  203. float TriOutSignalFreq;
  204. DO_NO_RET_AND_NOLOG(m_clstc->InterClk_readTriOutSignalFreq(TriOutSignalFreq));
  205. emit doinui_signal(QFunction([this, TriOutSignalFreq]() { //
  206. ui->InterClk_TriOutSignalFreq_Text->setText(QString::number(TriOutSignalFreq, 'f', 2));
  207. }));
  208. }
  209. }
  210. void MainWindow::refreshReadonlyPage1() {
  211. if (!G_QTDataChannel.isOpen()) {
  212. return;
  213. }
  214. {
  215. float infreq;
  216. float outfreq;
  217. #define UPDATE(index) \
  218. DO_NO_RET_AND_NOLOG(m_clstc->TriInX_readInSignalFreq(index, infreq)); \
  219. DO_NO_RET_AND_NOLOG(m_clstc->TriInX_readOutSignalFreq(index, outfreq)); \
  220. { \
  221. emit doinui_signal(QFunction([this, infreq, outfreq]() { \
  222. ui->TriInX_OutSignalFreq_Val_##index->setText(QString::number(outfreq, 'f', 2)); \
  223. ui->TriInX_InSignalFreq_Val_##index->setText(QString::number(infreq, 'f', 2)); \
  224. })); \
  225. }
  226. UPDATE(1);
  227. UPDATE(2);
  228. UPDATE(3);
  229. UPDATE(4);
  230. #undef UPDATE
  231. }
  232. }
  233. void MainWindow::refreshReadonlyPage2() {
  234. if (!G_QTDataChannel.isOpen()) {
  235. return;
  236. }
  237. // 刷新光源时序控制页面
  238. {
  239. float infreq;
  240. float outfreq;
  241. uint32_t state;
  242. #define UPDATE(index) \
  243. DO_NO_RET_AND_NOLOG(m_clstc->LightSrcX_readInSigFreqDetect(index, infreq)); \
  244. DO_NO_RET_AND_NOLOG(m_clstc->LightSrcX_readOutSigFreqDetect(index, outfreq)); \
  245. DO_NO_RET_AND_NOLOG(m_clstc->LightSrcX_readLightSrcErrorState(index, state)); \
  246. { \
  247. emit doinui_signal(QFunction([this, infreq, outfreq, state]() { \
  248. ui->LightSrcX_InSigFreqDetect_##index->setText(QString::number(infreq, 'f', 2)); \
  249. ui->LightSrcX_OutSigFreqDetect_##index->setText(QString::number(outfreq, 'f', 2)); \
  250. ui->LightSrcX_LightSrcErrorState_##index->setText(QString::number(state)); \
  251. })); \
  252. }
  253. UPDATE(1);
  254. UPDATE(2);
  255. UPDATE(3);
  256. UPDATE(4);
  257. #undef UPDATE
  258. }
  259. }
  260. void MainWindow::refreshReadonlyPage3() {
  261. if (!G_QTDataChannel.isOpen()) {
  262. return;
  263. }
  264. }
  265. bool MainWindow::checkConnected() {
  266. if (!G_QTDataChannel.isOpen()) {
  267. return false;
  268. }
  269. uint32_t val;
  270. zaf_error_code_t ecode = m_clstc->reg_read(kreg_software_version, val);
  271. if (ecode != kaf_ec_success) {
  272. return false;
  273. }
  274. return true;
  275. }
  276. zaf_error_code_t MainWindow::refreshPage() {
  277. /***********************************************************************************************************************
  278. * *
  279. ***********************************************************************************************************************/
  280. {
  281. uint32_t upperVersion = VERSION;
  282. uint32_t FPGAVersion = 0;
  283. uint32_t ARMVersion = 0;
  284. DO(m_clstc->reg_read(kreg_fpga_version, FPGAVersion));
  285. DO(m_clstc->reg_read(kreg_software_version, ARMVersion));
  286. ui->UpperVersion->setText(QString::number(upperVersion));
  287. ui->FPGAVersion->setText(QString::number(FPGAVersion));
  288. ui->ARMVersion->setText(QString::number(ARMVersion));
  289. }
  290. /*******************************************************************************
  291. * *
  292. *******************************************************************************/
  293. {
  294. float Freq;
  295. uint32_t PluseCnt;
  296. uint32_t SeqCtrlPluseCntMax;
  297. DO(m_clstc->InterClk_getFreq(Freq));
  298. DO(m_clstc->InterClk_getPluseCnt(PluseCnt));
  299. DO(m_clstc->InterClk_getSeqCtrlPluseCntMax(SeqCtrlPluseCntMax));
  300. ui->InterClk_Freq_Text->setText(QString::number(Freq, 'f', 2));
  301. ui->InterClk_PluseCnt_Text->setText(QString::number(PluseCnt));
  302. ui->InterClk_SeqCtrlPluseCntMax_Text->setText(QString::number(SeqCtrlPluseCntMax));
  303. }
  304. /*******************************************************************************
  305. * *
  306. *******************************************************************************/
  307. {
  308. ExtTriggerSrcType src;
  309. SigProcessMode mode;
  310. TriggerEdge edge;
  311. uint32_t coefficient;
  312. uint32_t bias;
  313. uint32_t division;
  314. uint32_t multiplication;
  315. uint32_t cnt;
  316. // TriInX_setSequentialControlPluseCntMax
  317. #define UPDATE(index) \
  318. DO(m_clstc->TriInX_getSrcSelect(index, src)); \
  319. DO(m_clstc->TriInX_getFileterCoefficient(index, coefficient)); \
  320. DO(m_clstc->TriInX_getFreqDetectBias(index, bias)); \
  321. DO(m_clstc->TriInX_getMode(index, mode)); \
  322. DO(m_clstc->TriInX_getTriggerModeTriggerEdge(index, edge)); \
  323. DO(m_clstc->TriInX_getTriggerModeFreqDivision(index, division)); \
  324. DO(m_clstc->TriInX_getTriggerModeFreqMultiplication(index, multiplication)); \
  325. DO(m_clstc->TriInX_getSequentialControlPluseCntMax(index, cnt)); \
  326. ui->TriInX_SrcSelect_Val_##index->setCurrentText(QString::fromStdString(src.toString())); \
  327. ui->TriInX_FileterCoefficient_Val_##index->setText(QString::number(coefficient)); \
  328. ui->TriInX_FreqDetectBias_Val_##index->setText(QString::number(bias)); \
  329. ui->TriInX_Mode_Val_##index->setCurrentText(QString::fromStdString(mode.toString())); \
  330. ui->TriInX_TriggerModeFreqDivision_Val_##index->setText(QString::number(division)); \
  331. ui->TriInX_TriggerModeFreqMultiplication_Val_##index->setText(QString::number(multiplication)); \
  332. ui->TriInX_TriggerModeTriggerEdge_Val_##index->setCurrentText(QString::fromStdString(edge.toString())); \
  333. ui->TriInX_SequentialControlPluseCntMax_Val_##index->setText(QString::number(cnt));
  334. UPDATE(1);
  335. UPDATE(2);
  336. UPDATE(3);
  337. UPDATE(4);
  338. #undef UPDATE
  339. }
  340. // 刷新光源时序控制页面
  341. {
  342. InternalSig src;
  343. uint32_t width;
  344. uint32_t offset;
  345. float duty;
  346. float freq;
  347. #define UPDATE(index) \
  348. DO(m_clstc->LightSrcX_getTriSrc(index, src)); \
  349. DO(m_clstc->LightSrcX_getTriggerModePluseWidth(index, width)); \
  350. DO(m_clstc->LightSrcX_getTriggerModeFirstPluseOffset(index, offset)); \
  351. DO(m_clstc->LightSrcX_getLightIntensityDuty(index, duty)); \
  352. DO(m_clstc->LightSrcX_getLightDriverFreq(index, freq)); \
  353. ui->LightSrcX_TriSrc_##index->setCurrentText(QString::fromStdString(src.toString())); \
  354. ui->LightSrcX_TriggerModePluseWidth_##index->setText(QString::number(width)); \
  355. ui->LightSrcX_TriggerModeFirstPluseOffset_##index->setText(QString::number(offset)); \
  356. ui->LightSrcX_LightIntensityDuty_##index->setText(QString::number(duty, 'f', 2)); \
  357. ui->LightSrcX_LightDriverFreq_##index->setText(QString::number(freq, 'f', 2));
  358. UPDATE(1);
  359. UPDATE(2);
  360. UPDATE(3);
  361. UPDATE(4);
  362. #undef UPDATE
  363. }
  364. {
  365. SigProcessMode mode;
  366. uint32_t offset;
  367. uint32_t bindstate1;
  368. uint32_t bindstate2;
  369. uint32_t bindstate3;
  370. uint32_t bindstate4;
  371. InternalSig sig;
  372. uint32_t reversal;
  373. // zaf_error_code_t ShutterX_setOutPolarityReversal(int32_t index, uint32_t reversal);
  374. #define UPDATE(index) \
  375. DO(m_clstc->ShutterX_getOutputCtrlMode(index, mode)); \
  376. DO(m_clstc->ShutterX_getLtEnOffset(index, offset)); \
  377. DO(m_clstc->ShutterX_getLtEnBind(index, 1, bindstate1)); \
  378. DO(m_clstc->ShutterX_getLtEnBind(index, 2, bindstate2)); \
  379. DO(m_clstc->ShutterX_getLtEnBind(index, 3, bindstate3)); \
  380. DO(m_clstc->ShutterX_getLtEnBind(index, 4, bindstate4)); \
  381. DO(m_clstc->ShutterX_getInSigSelect(index, sig)); \
  382. DO(m_clstc->ShutterX_getOutPolarityReversal(index, reversal)); \
  383. ui->ShutterX_OutputCtrlMode_##index->setCurrentText(QString::fromStdString(mode.toString())); \
  384. ui->ShutterX_LtEnOffset_##index->setText(QString::number(offset)); \
  385. ui->ShutterX_LtEnBind_val1_##index->setChecked(bindstate1 != 0 ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); \
  386. ui->ShutterX_LtEnBind_val2_##index->setChecked(bindstate2 != 0 ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); \
  387. ui->ShutterX_LtEnBind_val3_##index->setChecked(bindstate3 != 0 ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); \
  388. ui->ShutterX_LtEnBind_val4_##index->setChecked(bindstate4 != 0 ? Qt::CheckState::Checked : Qt::CheckState::Unchecked); \
  389. ui->ShutterX_InSigSelect_##index->setCurrentText(QString::fromStdString(sig.toString())); \
  390. ui->ShutterX_OutPolarityReversal_##index->setChecked(reversal != 0 ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
  391. // ui->ShutterX_LtEnBind_val1_1->checkState()
  392. UPDATE(1);
  393. UPDATE(2);
  394. UPDATE(3);
  395. UPDATE(4);
  396. #undef UPDATE
  397. }
  398. return kaf_ec_success;
  399. }
  400. void MainWindow::constructUI() {
  401. /*******************************************************************************
  402. * serialPortCB *
  403. *******************************************************************************/
  404. const auto infos = QSerialPortInfo::availablePorts();
  405. for (const QSerialPortInfo &info : infos) {
  406. ui->serialPortCB->addItem(info.portName());
  407. }
  408. /*******************************************************************************
  409. * ?? *
  410. *******************************************************************************/
  411. ui->serialBaudrateCB->addItem("9600");
  412. ui->serialBaudrateCB->addItem("14400");
  413. ui->serialBaudrateCB->addItem("19200");
  414. ui->serialBaudrateCB->addItem("38400");
  415. ui->serialBaudrateCB->addItem("57600");
  416. ui->serialBaudrateCB->addItem("115200");
  417. ui->serialBaudrateCB->addItem("500000");
  418. ui->serialBaudrateCB->setCurrentIndex(6);
  419. /*******************************************************************************
  420. * *
  421. *******************************************************************************/
  422. connect(ui->serialPortRefreshKey, &QPushButton::clicked, this, [this](bool check) {
  423. ui->serialPortCB->clear();
  424. const auto infos = QSerialPortInfo::availablePorts();
  425. for (const QSerialPortInfo &info : infos) {
  426. ui->serialPortCB->addItem(info.portName());
  427. }
  428. });
  429. /*******************************************************************************
  430. * *
  431. *******************************************************************************/
  432. connect(ui->serialOpenKey, &QPushButton::clicked, this, [=](bool check) {
  433. // 打开串口
  434. if (ui->serialOpenKey->text() == "打开") {
  435. G_QTDataChannel.setPortName(ui->serialPortCB->currentText().toStdString());
  436. G_QTDataChannel.setBaudRate(ui->serialBaudrateCB->currentText().toInt());
  437. G_QTDataChannel.setDataBits(QSerialPort::Data8);
  438. G_QTDataChannel.setParity(QSerialPort::NoParity);
  439. G_QTDataChannel.setFlowControl(QSerialPort::NoFlowControl);
  440. G_QTDataChannel.setStopBits(QSerialPort::OneStop);
  441. if (!G_QTDataChannel.open()) {
  442. QMessageBox::about(NULL, "提示", "串口无法打开,串口不存在或已被占??");
  443. return;
  444. }
  445. ui->serialOpenKey->setText("关闭");
  446. // 下拉菜单控件使能
  447. ui->serialBaudrateCB->setEnabled(false);
  448. ui->serialPortCB->setEnabled(false);
  449. ui->serialPortRefreshKey->setEnabled(false);
  450. } else {
  451. G_QTDataChannel.close();
  452. ui->serialOpenKey->setText("打开");
  453. ui->serialBaudrateCB->setEnabled(true);
  454. ui->serialPortCB->setEnabled(true);
  455. ui->serialPortRefreshKey->setEnabled(true);
  456. }
  457. });
  458. /*******************************************************************************
  459. * *
  460. *******************************************************************************/
  461. connect(ui->refreshPageKey, &QPushButton::clicked, this, [=](bool check) { //
  462. zaf_error_code_t ecode = refreshPage();
  463. if (ecode != kaf_ec_success) return;
  464. dumpLog("刷新成功");
  465. displayInfo(true, "刷新成功");
  466. QMessageBox::about(NULL, "消息", "刷新成功");
  467. });
  468. connect(ui->UpdateCfg_Key, &QPushButton::clicked, this, [=](bool check) { //
  469. zaf_error_code_t ecode = updatePage();
  470. if (ecode != kaf_ec_success) return;
  471. ecode = refreshPage();
  472. if (ecode != kaf_ec_success) return;
  473. DO_NO_RET(m_clstc->InterClk_trigger());
  474. dumpLog("提交成功");
  475. displayInfo(true, "提交成功");
  476. QMessageBox::about(NULL, "消息", "提交成功");
  477. });
  478. /*******************************************************************************
  479. * *
  480. *******************************************************************************/
  481. connect(ui->storageConfigKey, &QPushButton::clicked, this, [=](bool check) { //
  482. DO(m_clstc->storageConfigs());
  483. dumpLog("保存配置成功");
  484. displayInfo(true, "保存配置成功");
  485. QMessageBox::about(NULL, "消息", "保存配置成功");
  486. });
  487. /*******************************************************************************
  488. * *
  489. *******************************************************************************/
  490. connect(ui->rebootDeviceKey, &QPushButton::clicked, this, [=](bool check) { //
  491. DO_NO_RET(m_clstc->reboot());
  492. dumpLog("重启设备成功");
  493. displayInfo(true, "重启设备成功");
  494. QMessageBox::about(NULL, "消息", "重启设备成功");
  495. });
  496. /*******************************************************************************
  497. * *
  498. *******************************************************************************/
  499. connect(ui->factoryResetKey, &QPushButton::clicked, this, [=](bool check) { //
  500. DO_NO_RET(m_clstc->factoryReset());
  501. dumpLog("恢复出厂设置成功");
  502. displayInfo(true, "恢复出厂设置成功");
  503. QMessageBox::about(NULL, "消息", "恢复出厂设置成功");
  504. });
  505. /*******************************************************************************
  506. * ?? *
  507. *******************************************************************************/
  508. ui->RegAdd->setText("0x00000000");
  509. connect(ui->regReadKey, &QPushButton::clicked, this, [=](bool check) { //
  510. uint32_t addr = str2int(ui->RegAdd->text());
  511. uint32_t value = 0;
  512. DO_NO_RET(m_clstc->reg_read(addr, value, 100));
  513. ui->regReadbakVal->setText(fmt("0x%08X", value));
  514. dumpLog(fmt("读取0x%04x成功", addr));
  515. });
  516. connect(ui->regWriteKey, &QPushButton::clicked, this, [=](bool check) { //
  517. uint32_t addr = str2int(ui->RegAdd->text());
  518. uint32_t value = str2int(ui->regWriteVal->text());
  519. uint32_t readkbak = 0;
  520. DO_NO_RET(m_clstc->reg_write(addr, value, readkbak, 100));
  521. ui->regReadbakVal->setText(fmt("0x%04x", readkbak));
  522. dumpLog(fmt("写入0x%08x成功", addr));
  523. });
  524. connect(ui->InterClk_trigger_Key, &QPushButton::clicked, this, [=](bool check) { //
  525. DO_NO_RET(m_clstc->InterClk_trigger());
  526. dumpLog(fmt("触发成功"));
  527. });
  528. connect(ui->InterClk_stop_Key, &QPushButton::clicked, this, [=](bool check) { //
  529. DO_NO_RET(m_clstc->InterClk_stop());
  530. dumpLog(fmt("停止触发成功"));
  531. });
  532. /*******************************************************************************
  533. * *
  534. *******************************************************************************/
  535. ui->TriInX_SrcSelect_Val_1->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  536. ui->TriInX_SrcSelect_Val_1->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  537. ui->TriInX_Mode_Val_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  538. ui->TriInX_Mode_Val_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  539. ui->TriInX_TriggerModeTriggerEdge_Val_1->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  540. ui->TriInX_TriggerModeTriggerEdge_Val_1->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  541. ui->TriInX_SrcSelect_Val_2->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  542. ui->TriInX_SrcSelect_Val_2->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  543. ui->TriInX_Mode_Val_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  544. ui->TriInX_Mode_Val_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  545. ui->TriInX_TriggerModeTriggerEdge_Val_2->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  546. ui->TriInX_TriggerModeTriggerEdge_Val_2->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  547. ui->TriInX_SrcSelect_Val_3->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  548. ui->TriInX_SrcSelect_Val_3->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  549. ui->TriInX_Mode_Val_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  550. ui->TriInX_Mode_Val_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  551. ui->TriInX_TriggerModeTriggerEdge_Val_3->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  552. ui->TriInX_TriggerModeTriggerEdge_Val_3->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  553. ui->TriInX_SrcSelect_Val_4->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  554. ui->TriInX_SrcSelect_Val_4->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  555. ui->TriInX_Mode_Val_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  556. ui->TriInX_Mode_Val_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  557. ui->TriInX_TriggerModeTriggerEdge_Val_4->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  558. ui->TriInX_TriggerModeTriggerEdge_Val_4->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  559. ui->TriInX_InSignalFreq_Val_1->setDisabled(true);
  560. ui->TriInX_InSignalFreq_Val_2->setDisabled(true);
  561. ui->TriInX_InSignalFreq_Val_3->setDisabled(true);
  562. ui->TriInX_InSignalFreq_Val_4->setDisabled(true);
  563. ui->TriInX_OutSignalFreq_Val_1->setDisabled(true);
  564. ui->TriInX_OutSignalFreq_Val_2->setDisabled(true);
  565. ui->TriInX_OutSignalFreq_Val_3->setDisabled(true);
  566. ui->TriInX_OutSignalFreq_Val_4->setDisabled(true);
  567. /*******************************************************************************
  568. * *
  569. *******************************************************************************/
  570. QStringList LightSrcX_TriSrc_QStringList;
  571. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::LOGIC0).toString()));
  572. // LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::LOGIC1).toString()));
  573. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER).toString()));
  574. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1).toString()));
  575. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2).toString()));
  576. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3).toString()));
  577. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4).toString()));
  578. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I1).toString()));
  579. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I2).toString()));
  580. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I3).toString()));
  581. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I4).toString()));
  582. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I1).toString()));
  583. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I2).toString()));
  584. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I3).toString()));
  585. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I4).toString()));
  586. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I1).toString()));
  587. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I2).toString()));
  588. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I3).toString()));
  589. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I4).toString()));
  590. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I1).toString()));
  591. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I2).toString()));
  592. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I3).toString()));
  593. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I4).toString()));
  594. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I1).toString()));
  595. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I2).toString()));
  596. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I3).toString()));
  597. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I4).toString()));
  598. ui->LightSrcX_TriSrc_1->addItems(LightSrcX_TriSrc_QStringList);
  599. ui->LightSrcX_TriSrc_2->addItems(LightSrcX_TriSrc_QStringList);
  600. ui->LightSrcX_TriSrc_3->addItems(LightSrcX_TriSrc_QStringList);
  601. ui->LightSrcX_TriSrc_4->addItems(LightSrcX_TriSrc_QStringList);
  602. ui->LightSrcX_InSigFreqDetect_1->setDisabled(true);
  603. ui->LightSrcX_InSigFreqDetect_2->setDisabled(true);
  604. ui->LightSrcX_InSigFreqDetect_3->setDisabled(true);
  605. ui->LightSrcX_InSigFreqDetect_4->setDisabled(true);
  606. ui->LightSrcX_OutSigFreqDetect_1->setDisabled(true);
  607. ui->LightSrcX_OutSigFreqDetect_2->setDisabled(true);
  608. ui->LightSrcX_OutSigFreqDetect_3->setDisabled(true);
  609. ui->LightSrcX_OutSigFreqDetect_4->setDisabled(true);
  610. ui->LightSrcX_LightSrcErrorState_1->setDisabled(true);
  611. ui->LightSrcX_LightSrcErrorState_2->setDisabled(true);
  612. ui->LightSrcX_LightSrcErrorState_3->setDisabled(true);
  613. ui->LightSrcX_LightSrcErrorState_4->setDisabled(true);
  614. ui->LightSrcX_LightDriverFreq_1->setDisabled(false);
  615. ui->LightSrcX_LightDriverFreq_2->setDisabled(false);
  616. ui->LightSrcX_LightDriverFreq_3->setDisabled(false);
  617. ui->LightSrcX_LightDriverFreq_4->setDisabled(false);
  618. /*******************************************************************************
  619. * *
  620. *******************************************************************************/
  621. ui->ShutterX_OutputCtrlMode_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  622. ui->ShutterX_OutputCtrlMode_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  623. ui->ShutterX_OutputCtrlMode_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  624. ui->ShutterX_OutputCtrlMode_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  625. ui->ShutterX_OutputCtrlMode_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::BIND_MODE).toString()));
  626. ui->ShutterX_OutputCtrlMode_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::BIND_MODE).toString()));
  627. ui->ShutterX_OutputCtrlMode_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::BIND_MODE).toString()));
  628. ui->ShutterX_OutputCtrlMode_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::BIND_MODE).toString()));
  629. ui->ShutterX_InSigSelect_1->addItems(LightSrcX_TriSrc_QStringList);
  630. ui->ShutterX_InSigSelect_2->addItems(LightSrcX_TriSrc_QStringList);
  631. ui->ShutterX_InSigSelect_3->addItems(LightSrcX_TriSrc_QStringList);
  632. ui->ShutterX_InSigSelect_4->addItems(LightSrcX_TriSrc_QStringList);
  633. ui->InterClk_TriOutSignalFreq_Text->setDisabled(true);
  634. }
  635. void MainWindow::enterProfessionalModel() {
  636. ui->refreshPageKey->show();
  637. ui->TriInX_FreqDetectBias_Lable_1->show();
  638. ui->TriInX_FreqDetectBias_Lable_2->show();
  639. ui->TriInX_FreqDetectBias_Lable_3->show();
  640. ui->TriInX_FreqDetectBias_Lable_4->show();
  641. ui->TriInX_FreqDetectBias_Val_1->show();
  642. ui->TriInX_FreqDetectBias_Val_2->show();
  643. ui->TriInX_FreqDetectBias_Val_3->show();
  644. ui->TriInX_FreqDetectBias_Val_4->show();
  645. ui->TriInX_Mode_Lable_1->show();
  646. ui->TriInX_Mode_Lable_2->show();
  647. ui->TriInX_Mode_Lable_3->show();
  648. ui->TriInX_Mode_Lable_4->show();
  649. ui->TriInX_Mode_Val_1->show();
  650. ui->TriInX_Mode_Val_2->show();
  651. ui->TriInX_Mode_Val_3->show();
  652. ui->TriInX_Mode_Val_4->show();
  653. ui->LightSrcX_LightDriverFreq_Lable_1->show();
  654. ui->LightSrcX_LightDriverFreq_Lable_2->show();
  655. ui->LightSrcX_LightDriverFreq_Lable_3->show();
  656. ui->LightSrcX_LightDriverFreq_Lable_4->show();
  657. ui->LightSrcX_LightDriverFreq_1->show();
  658. ui->LightSrcX_LightDriverFreq_2->show();
  659. ui->LightSrcX_LightDriverFreq_3->show();
  660. ui->LightSrcX_LightDriverFreq_4->show();
  661. ui->ShutterX_OutputCtrlMode_Lable_1->show();
  662. ui->ShutterX_OutputCtrlMode_Lable_2->show();
  663. ui->ShutterX_OutputCtrlMode_Lable_3->show();
  664. ui->ShutterX_OutputCtrlMode_Lable_4->show();
  665. ui->ShutterX_OutputCtrlMode_1->show();
  666. ui->ShutterX_OutputCtrlMode_2->show();
  667. ui->ShutterX_OutputCtrlMode_3->show();
  668. ui->ShutterX_OutputCtrlMode_4->show();
  669. ui->ShutterX_InSigSelect_Lable_1->show();
  670. ui->ShutterX_InSigSelect_Lable_2->show();
  671. ui->ShutterX_InSigSelect_Lable_3->show();
  672. ui->ShutterX_InSigSelect_Lable_4->show();
  673. ui->ShutterX_InSigSelect_1->show();
  674. ui->ShutterX_InSigSelect_2->show();
  675. ui->ShutterX_InSigSelect_3->show();
  676. ui->ShutterX_InSigSelect_4->show();
  677. ui->LightSrcX_LightSrcErrorState_Lable_1->show();
  678. ui->LightSrcX_LightSrcErrorState_Lable_2->show();
  679. ui->LightSrcX_LightSrcErrorState_Lable_3->show();
  680. ui->LightSrcX_LightSrcErrorState_Lable_4->show();
  681. ui->LightSrcX_LightSrcErrorState_1->show();
  682. ui->LightSrcX_LightSrcErrorState_2->show();
  683. ui->LightSrcX_LightSrcErrorState_3->show();
  684. ui->LightSrcX_LightSrcErrorState_4->show();
  685. ui->LOGBOX->show();
  686. ui->RegOpeation->show();
  687. }
  688. void MainWindow::exitProfessionalModel() {
  689. ui->refreshPageKey->hide();
  690. ui->TriInX_FreqDetectBias_Lable_1->hide();
  691. ui->TriInX_FreqDetectBias_Lable_2->hide();
  692. ui->TriInX_FreqDetectBias_Lable_3->hide();
  693. ui->TriInX_FreqDetectBias_Lable_4->hide();
  694. ui->TriInX_FreqDetectBias_Val_1->hide();
  695. ui->TriInX_FreqDetectBias_Val_2->hide();
  696. ui->TriInX_FreqDetectBias_Val_3->hide();
  697. ui->TriInX_FreqDetectBias_Val_4->hide();
  698. ui->TriInX_Mode_Lable_1->hide();
  699. ui->TriInX_Mode_Lable_2->hide();
  700. ui->TriInX_Mode_Lable_3->hide();
  701. ui->TriInX_Mode_Lable_4->hide();
  702. ui->TriInX_Mode_Val_1->hide();
  703. ui->TriInX_Mode_Val_2->hide();
  704. ui->TriInX_Mode_Val_3->hide();
  705. ui->TriInX_Mode_Val_4->hide();
  706. ui->LightSrcX_LightDriverFreq_Lable_1->hide();
  707. ui->LightSrcX_LightDriverFreq_Lable_2->hide();
  708. ui->LightSrcX_LightDriverFreq_Lable_3->hide();
  709. ui->LightSrcX_LightDriverFreq_Lable_4->hide();
  710. ui->LightSrcX_LightDriverFreq_1->hide();
  711. ui->LightSrcX_LightDriverFreq_2->hide();
  712. ui->LightSrcX_LightDriverFreq_3->hide();
  713. ui->LightSrcX_LightDriverFreq_4->hide();
  714. ui->ShutterX_OutputCtrlMode_Lable_1->hide();
  715. ui->ShutterX_OutputCtrlMode_Lable_2->hide();
  716. ui->ShutterX_OutputCtrlMode_Lable_3->hide();
  717. ui->ShutterX_OutputCtrlMode_Lable_4->hide();
  718. ui->ShutterX_OutputCtrlMode_1->hide();
  719. ui->ShutterX_OutputCtrlMode_2->hide();
  720. ui->ShutterX_OutputCtrlMode_3->hide();
  721. ui->ShutterX_OutputCtrlMode_4->hide();
  722. ui->ShutterX_InSigSelect_Lable_1->hide();
  723. ui->ShutterX_InSigSelect_Lable_2->hide();
  724. ui->ShutterX_InSigSelect_Lable_3->hide();
  725. ui->ShutterX_InSigSelect_Lable_4->hide();
  726. ui->ShutterX_InSigSelect_1->hide();
  727. ui->ShutterX_InSigSelect_2->hide();
  728. ui->ShutterX_InSigSelect_3->hide();
  729. ui->ShutterX_InSigSelect_4->hide();
  730. ui->LightSrcX_LightSrcErrorState_Lable_1->hide();
  731. ui->LightSrcX_LightSrcErrorState_Lable_2->hide();
  732. ui->LightSrcX_LightSrcErrorState_Lable_3->hide();
  733. ui->LightSrcX_LightSrcErrorState_Lable_4->hide();
  734. ui->LightSrcX_LightSrcErrorState_1->hide();
  735. ui->LightSrcX_LightSrcErrorState_2->hide();
  736. ui->LightSrcX_LightSrcErrorState_3->hide();
  737. ui->LightSrcX_LightSrcErrorState_4->hide();
  738. ui->LOGBOX->hide();
  739. ui->RegOpeation->hide();
  740. }
  741. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
  742. // G_SerialPort.moveToThread();
  743. // QObject::connect(&G_SerialPortThread, &QThread::started, &G_SerialPort, &QSerialPort::open);
  744. G_QTDataChannel.init();
  745. CLSTControler::ins()->initialize(&G_QTDataChannel);
  746. m_clstc = CLSTControler::ins();
  747. ui->setupUi(this);
  748. m_mainWindow = this;
  749. qRegisterMetaType<int32_t>("int32_t");
  750. qRegisterMetaType<uint32_t>("uint32_t");
  751. qRegisterMetaType<float>("float");
  752. qRegisterMetaType<function<void()>>("function<void()>");
  753. qRegisterMetaType<QFunction>("QFunction");
  754. // qInstallMessageHandler(log_output);
  755. connect(this, SIGNAL(doinui_signal(QFunction)), this, SLOT(doinui_slot(QFunction)));
  756. constructUI();
  757. // 隐藏部分控件
  758. exitProfessionalModel();
  759. // 创建定时器
  760. timer0 = new QTimer(this);
  761. timer1 = new QTimer(this);
  762. timer2 = new QTimer(this);
  763. timer3 = new QTimer(this);
  764. checkConnectTimer0 = new QTimer(this);
  765. m_zqthread = new ZQThread("", [this]() {
  766. while (true) {
  767. static bool first = true;
  768. bool connect = checkConnected();
  769. if (m_connected != connect || first) {
  770. first = false;
  771. m_connected = connect;
  772. emit doinui_signal(QFunction([this, connect]() {
  773. if (connect) {
  774. ui->DeviceConnectStateTB->setText("已连接");
  775. ui->DeviceConnectStateTB->setStyleSheet("color: green");
  776. displayInfo(true, "连接成功");
  777. } else {
  778. ui->DeviceConnectStateTB->setText("未连接");
  779. ui->DeviceConnectStateTB->setStyleSheet("color: red");
  780. }
  781. if (m_connected) {
  782. m_clstc->setAllShawdowRegDirty();
  783. refreshPage();
  784. }
  785. }));
  786. }
  787. if (connect) {
  788. refreshReadonlyPage0();
  789. refreshReadonlyPage1();
  790. refreshReadonlyPage2();
  791. refreshReadonlyPage3();
  792. }
  793. std::this_thread::sleep_for(std::chrono::milliseconds(1000));
  794. }
  795. });
  796. m_zqthread->start();
  797. }
  798. void MainWindow::dumpLog(const char *fmt, ...) {
  799. va_list args;
  800. va_start(args, fmt);
  801. char buf[1024] = {0};
  802. vsnprintf(buf, sizeof(buf), fmt, args);
  803. // qDebug() << buf;
  804. va_end(args);
  805. QString text(buf);
  806. QString info;
  807. // zos_get_ticket
  808. info.append(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"));
  809. info.append(" [Info]:");
  810. info.append(text);
  811. static int id;
  812. // informationBrowser
  813. emit doinui_signal(QFunction([this, info]() {
  814. if (ui->instructionPreview->document()->lineCount() > 100) {
  815. ui->instructionPreview->document()->clear();
  816. }
  817. ui->instructionPreview->append(info);
  818. }));
  819. }
  820. void MainWindow::displayInfo(bool suc, QString info) {
  821. emit doinui_signal(QFunction([this, info, suc]() {
  822. static int cnt = 0;
  823. cnt++;
  824. QString _info;
  825. _info.append("[");
  826. _info.append(QString::number(cnt));
  827. _info.append("] ");
  828. _info.append(info);
  829. if (suc) {
  830. ui->informationBrowser->setStyleSheet("color: green");
  831. } else {
  832. ui->informationBrowser->setStyleSheet("color: red");
  833. }
  834. ui->informationBrowser->setText(_info);
  835. }));
  836. }
  837. MainWindow::~MainWindow() { delete ui; }
  838. void MainWindow::on_ProfessionalModel_toggled(bool arg1) {
  839. if (arg1) {
  840. enterProfessionalModel();
  841. } else {
  842. exitProfessionalModel();
  843. }
  844. }