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.

604 lines
29 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
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
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
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
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. #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. using namespace iflytop;
  11. using namespace clst;
  12. using namespace std;
  13. static MainWindow *m_mainWindow;
  14. static CLSTControler *m_clstc;
  15. QTimer *timer;
  16. #define TAG "MainWindow"
  17. static const char *fmt(const char *fmt, ...) {
  18. va_list args;
  19. va_start(args, fmt);
  20. static char buf[1024] = {0};
  21. vsnprintf(buf, sizeof(buf), fmt, args);
  22. va_end(args);
  23. return buf;
  24. }
  25. static const uint32_t str2int(QString str) {
  26. // 如果0x开头,??16进制转换
  27. // 如果0b开头,??2进制转换
  28. // 否则??10进制转换
  29. // 去除掉str中_
  30. str.remove("_");
  31. if (str.startsWith("0x")) {
  32. return str.toUInt(nullptr, 16);
  33. } else if (str.startsWith("0b")) {
  34. // remove 0b
  35. str.remove(0, 2);
  36. return str.toUInt(nullptr, 2);
  37. } else {
  38. return str.toUInt(nullptr, 10);
  39. }
  40. }
  41. // static QSerialPort G_SerialPort;
  42. // static QThread G_SerialPortThread;
  43. static QTDataChannel G_QTDataChannel;
  44. static const QString zaferror_to_str(zaf_error_code_t value) {
  45. if (value == kaf_ec_overtime) {
  46. return "操作超时";
  47. } else if (value == kaf_ec_device_notopen) {
  48. return "设备未打开";
  49. } else {
  50. return "未知错误";
  51. }
  52. }
  53. #define DO(action) \
  54. { \
  55. zaf_error_code_t ecode = action; \
  56. if (ecode != kaf_ec_success) { \
  57. dumpLog("do %s fail,%s", #action, zaferror_to_str(ecode).toStdString().c_str()); \
  58. return; \
  59. } \
  60. }
  61. void MainWindow::log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
  62. // QString text;
  63. // text.append(msg);
  64. }
  65. // void MainWindow::append_log_slot(QString text) { ui->logbrowser->append(text); }
  66. void MainWindow::doinui_slot(QFunction func) {
  67. if (func.get()) func.get()();
  68. }
  69. void MainWindow::updatePage() {
  70. {
  71. float Freq;
  72. uint32_t PluseCnt;
  73. uint32_t SeqCtrlPluseCntMax;
  74. Freq = ui->InterClk_Freq_Text->text().toFloat();
  75. PluseCnt = ui->InterClk_PluseCnt_Text->text().toUInt();
  76. SeqCtrlPluseCntMax = ui->InterClk_SeqCtrlPluseCntMax_Text->text().toUInt();
  77. DO(m_clstc->InterClk_setFreq(Freq));
  78. DO(m_clstc->InterClk_setPluseCnt(PluseCnt));
  79. DO(m_clstc->InterClk_setSeqCtrlPluseCntMax(SeqCtrlPluseCntMax));
  80. }
  81. {
  82. ExtTriggerSrcType src;
  83. SigProcessMode mode;
  84. TriggerEdge edge;
  85. uint32_t coefficient;
  86. uint32_t bias;
  87. uint32_t division;
  88. uint32_t multiplication;
  89. #define UPDATE(index) \
  90. src = ExtTriggerSrcType(ui->TriInX_SrcSelect_Val_##index->currentText().toStdString()); \
  91. coefficient = ui->TriInX_FileterCoefficient_Val_##index->text().toUInt(); \
  92. bias = ui->TriInX_FreqDetectBias_Val_##index->text().toUInt(); \
  93. mode = SigProcessMode(ui->TriInX_Mode_Val_##index->currentText().toStdString()); \
  94. edge = TriggerEdge(ui->TriInX_TriggerModeTriggerEdge_Val_##index->currentText().toStdString()); \
  95. division = ui->TriInX_TriggerModeFreqDivision_Val_##index->text().toUInt(); \
  96. multiplication = ui->TriInX_TriggerModeFreqMultiplication_Val_##index->text().toUInt(); \
  97. DO(m_clstc->TriInX_setSrcSelect(index, src)); \
  98. DO(m_clstc->TriInX_setFileterCoefficient(index, coefficient)); \
  99. DO(m_clstc->TriInX_setFreqDetectBias(index, bias)); \
  100. DO(m_clstc->TriInX_setMode(index, mode)); \
  101. DO(m_clstc->TriInX_setTriggerModeTriggerEdge(index, edge)); \
  102. DO(m_clstc->TriInX_setTriggerModeFreqDivision(index, division)); \
  103. DO(m_clstc->TriInX_setTriggerModeFreqMultiplication(index, multiplication));
  104. UPDATE(1);
  105. UPDATE(2);
  106. UPDATE(3);
  107. UPDATE(4);
  108. #undef UPDATE
  109. }
  110. {
  111. InternalSig src;
  112. uint32_t width;
  113. uint32_t offset;
  114. float duty;
  115. float freq;
  116. #define UPDATE(index) \
  117. src = InternalSig(ui->LightSrcX_TriSrc_##index->currentText().toStdString()); \
  118. width = ui->LightSrcX_TriggerModePluseWidth_##index->text().toUInt(); \
  119. offset = ui->LightSrcX_TriggerModeFirstPluseOffset_##index->text().toUInt(); \
  120. duty = ui->LightSrcX_LightIntensityDuty_##index->text().toFloat(); \
  121. freq = ui->LightSrcX_LightDriverFreq_##index->text().toFloat(); \
  122. DO(m_clstc->LightSrcX_setTriSrc(index, src)); \
  123. DO(m_clstc->LightSrcX_setTriggerModePluseWidth(index, width)); \
  124. DO(m_clstc->LightSrcX_setTriggerModeFirstPluseOffset(index, offset)); \
  125. DO(m_clstc->LightSrcX_setLightIntensityDuty(index, duty)); \
  126. DO(m_clstc->LightSrcX_setLightDriverFreq(index, freq));
  127. UPDATE(1);
  128. UPDATE(2);
  129. UPDATE(3);
  130. UPDATE(4);
  131. }
  132. }
  133. void MainWindow::refreshReadonlyPage() {
  134. zaf_error_code_t ecode;
  135. if (!G_QTDataChannel.isOpen()) {
  136. return;
  137. }
  138. {
  139. float TriOutSignalFreq;
  140. DO(m_clstc->InterClk_readTriOutSignalFreq(TriOutSignalFreq));
  141. ui->InterClk_TriOutSignalFreq_Text->setText(QString::number(TriOutSignalFreq, 'f', 2));
  142. }
  143. {
  144. float infreq;
  145. float outfreq;
  146. #define UPDATE(index) \
  147. DO(m_clstc->TriInX_readInSignalFreq(index, infreq)); \
  148. DO(m_clstc->TriInX_readOutSignalFreq(index, outfreq)); \
  149. ui->TriInX_OutSignalFreq_Val_##index->setText(QString::number(outfreq, 'f', 2)); \
  150. ui->TriInX_InSignalFreq_Val_##index->setText(QString::number(infreq, 'f', 2));
  151. UPDATE(1);
  152. UPDATE(2);
  153. UPDATE(3);
  154. UPDATE(4);
  155. #undef UPDATE
  156. }
  157. // 刷新光源时序控制页面
  158. {
  159. float infreq;
  160. float outfreq;
  161. uint32_t state;
  162. #define UPDATE(index) \
  163. DO(m_clstc->LightSrcX_readInSigFreqDetect(index, infreq)); \
  164. DO(m_clstc->LightSrcX_readOutSigFreqDetect(index, outfreq)); \
  165. DO(m_clstc->LightSrcX_readLightSrcErrorState(index, state)); \
  166. ui->LightSrcX_InSigFreqDetect_##index->setText(QString::number(infreq, 'f', 2)); \
  167. ui->LightSrcX_OutSigFreqDetect_##index->setText(QString::number(outfreq, 'f', 2)); \
  168. ui->LightSrcX_LightSrcErrorState_##index->setText(QString::number(state));
  169. UPDATE(1);
  170. UPDATE(2);
  171. UPDATE(3);
  172. UPDATE(4);
  173. }
  174. }
  175. void MainWindow::refreshPage() {
  176. /*******************************************************************************
  177. * *
  178. *******************************************************************************/
  179. {
  180. float Freq;
  181. uint32_t PluseCnt;
  182. uint32_t SeqCtrlPluseCntMax;
  183. float TriOutSignalFreq;
  184. DO(m_clstc->InterClk_getFreq(Freq));
  185. DO(m_clstc->InterClk_getPluseCnt(PluseCnt));
  186. DO(m_clstc->InterClk_getSeqCtrlPluseCntMax(SeqCtrlPluseCntMax));
  187. DO(m_clstc->InterClk_readTriOutSignalFreq(TriOutSignalFreq));
  188. ui->InterClk_Freq_Text->setText(QString::number(Freq, 'f', 2));
  189. ui->InterClk_PluseCnt_Text->setText(QString::number(PluseCnt));
  190. ui->InterClk_SeqCtrlPluseCntMax_Text->setText(QString::number(SeqCtrlPluseCntMax));
  191. ui->InterClk_TriOutSignalFreq_Text->setText(QString::number(TriOutSignalFreq, 'f', 2));
  192. }
  193. /*******************************************************************************
  194. * *
  195. *******************************************************************************/
  196. {
  197. ExtTriggerSrcType src;
  198. SigProcessMode mode;
  199. TriggerEdge edge;
  200. uint32_t coefficient;
  201. uint32_t bias;
  202. uint32_t division;
  203. uint32_t multiplication;
  204. float infreq;
  205. float outfreq;
  206. #define UPDATE(index) \
  207. DO(m_clstc->TriInX_getSrcSelect(index, src)); \
  208. DO(m_clstc->TriInX_getFileterCoefficient(index, coefficient)); \
  209. DO(m_clstc->TriInX_getFreqDetectBias(index, bias)); \
  210. DO(m_clstc->TriInX_getMode(index, mode)); \
  211. DO(m_clstc->TriInX_getTriggerModeTriggerEdge(index, edge)); \
  212. DO(m_clstc->TriInX_getTriggerModeFreqDivision(index, division)); \
  213. DO(m_clstc->TriInX_getTriggerModeFreqMultiplication(index, multiplication)); \
  214. DO(m_clstc->TriInX_readInSignalFreq(index, infreq)); \
  215. DO(m_clstc->TriInX_readOutSignalFreq(index, outfreq)); \
  216. ui->TriInX_SrcSelect_Val_##index->setCurrentText(QString::fromStdString(src.toString())); \
  217. ui->TriInX_FileterCoefficient_Val_##index->setText(QString::number(coefficient)); \
  218. ui->TriInX_FreqDetectBias_Val_##index->setText(QString::number(bias)); \
  219. ui->TriInX_Mode_Val_##index->setCurrentText(QString::fromStdString(mode.toString())); \
  220. ui->TriInX_OutSignalFreq_Val_##index->setText(QString::number(outfreq, 'f', 2)); \
  221. ui->TriInX_InSignalFreq_Val_##index->setText(QString::number(infreq, 'f', 2)); \
  222. ui->TriInX_TriggerModeFreqDivision_Val_##index->setText(QString::number(division)); \
  223. ui->TriInX_TriggerModeFreqMultiplication_Val_##index->setText(QString::number(multiplication)); \
  224. ui->TriInX_TriggerModeTriggerEdge_Val_##index->setCurrentText(QString::fromStdString(edge.toString()));
  225. UPDATE(1);
  226. UPDATE(2);
  227. UPDATE(3);
  228. UPDATE(4);
  229. #undef UPDATE
  230. }
  231. // 刷新光源时序控制页面
  232. {
  233. InternalSig src;
  234. uint32_t width;
  235. uint32_t offset;
  236. float duty;
  237. float freq;
  238. uint32_t state;
  239. float infreq;
  240. float outfreq;
  241. #define UPDATE(index) \
  242. DO(m_clstc->LightSrcX_getTriSrc(index, src)); \
  243. DO(m_clstc->LightSrcX_getTriggerModePluseWidth(index, width)); \
  244. DO(m_clstc->LightSrcX_getTriggerModeFirstPluseOffset(index, offset)); \
  245. DO(m_clstc->LightSrcX_getLightIntensityDuty(index, duty)); \
  246. DO(m_clstc->LightSrcX_getLightDriverFreq(index, freq)); \
  247. DO(m_clstc->LightSrcX_readLightSrcErrorState(index, state)); \
  248. DO(m_clstc->LightSrcX_readInSigFreqDetect(index, infreq)); \
  249. DO(m_clstc->LightSrcX_readOutSigFreqDetect(index, outfreq)); \
  250. ui->LightSrcX_TriSrc_##index->setCurrentText(QString::fromStdString(src.toString())); \
  251. ui->LightSrcX_TriggerModePluseWidth_##index->setText(QString::number(width)); \
  252. ui->LightSrcX_TriggerModeFirstPluseOffset_##index->setText(QString::number(offset)); \
  253. ui->LightSrcX_LightIntensityDuty_##index->setText(QString::number(duty, 'f', 2)); \
  254. ui->LightSrcX_LightDriverFreq_##index->setText(QString::number(freq, 'f', 2)); \
  255. ui->LightSrcX_LightSrcErrorState_##index->setText(QString::number(state)); \
  256. ui->LightSrcX_InSigFreqDetect_##index->setText(QString::number(infreq, 'f', 2)); \
  257. ui->LightSrcX_OutSigFreqDetect_##index->setText(QString::number(outfreq, 'f', 2));
  258. UPDATE(1);
  259. UPDATE(2);
  260. UPDATE(3);
  261. UPDATE(4);
  262. }
  263. }
  264. void MainWindow::constructUI() {
  265. /*******************************************************************************
  266. * serialPortCB *
  267. *******************************************************************************/
  268. const auto infos = QSerialPortInfo::availablePorts();
  269. for (const QSerialPortInfo &info : infos) {
  270. ui->serialPortCB->addItem(info.portName());
  271. }
  272. /*******************************************************************************
  273. * ?? *
  274. *******************************************************************************/
  275. ui->serialBaudrateCB->addItem("9600");
  276. ui->serialBaudrateCB->addItem("14400");
  277. ui->serialBaudrateCB->addItem("19200");
  278. ui->serialBaudrateCB->addItem("38400");
  279. ui->serialBaudrateCB->addItem("57600");
  280. ui->serialBaudrateCB->addItem("115200");
  281. ui->serialBaudrateCB->setCurrentIndex(5);
  282. /*******************************************************************************
  283. * *
  284. *******************************************************************************/
  285. connect(ui->serialPortRefreshKey, &QPushButton::clicked, this, [this](bool check) {
  286. ui->serialPortCB->clear();
  287. const auto infos = QSerialPortInfo::availablePorts();
  288. for (const QSerialPortInfo &info : infos) {
  289. ui->serialPortCB->addItem(info.portName());
  290. }
  291. });
  292. /*******************************************************************************
  293. * *
  294. *******************************************************************************/
  295. connect(ui->serialOpenKey, &QPushButton::clicked, this, [=](bool check) {
  296. // 打开串口
  297. if (ui->serialOpenKey->text() == "打开") {
  298. G_QTDataChannel.setPortName(ui->serialPortCB->currentText().toStdString());
  299. G_QTDataChannel.setBaudRate(ui->serialBaudrateCB->currentText().toInt());
  300. G_QTDataChannel.setDataBits(QSerialPort::Data8);
  301. G_QTDataChannel.setParity(QSerialPort::NoParity);
  302. G_QTDataChannel.setFlowControl(QSerialPort::NoFlowControl);
  303. G_QTDataChannel.setStopBits(QSerialPort::OneStop);
  304. if (!G_QTDataChannel.open()) {
  305. QMessageBox::about(NULL, "提示", "串口无法打开,串口不存在或已被占??");
  306. return;
  307. }
  308. ui->serialOpenKey->setText("关闭");
  309. // 下拉菜单控件使能
  310. ui->serialBaudrateCB->setEnabled(false);
  311. ui->serialPortCB->setEnabled(false);
  312. ui->serialPortRefreshKey->setEnabled(false);
  313. } else {
  314. G_QTDataChannel.close();
  315. ui->serialOpenKey->setText("打开");
  316. ui->serialBaudrateCB->setEnabled(true);
  317. ui->serialPortCB->setEnabled(true);
  318. ui->serialPortRefreshKey->setEnabled(true);
  319. }
  320. });
  321. /*******************************************************************************
  322. * *
  323. *******************************************************************************/
  324. connect(ui->refreshPageKey, &QPushButton::clicked, this, [=](bool check) { //
  325. refreshPage();
  326. dumpLog("刷新成功");
  327. });
  328. connect(ui->UpdateCfg_Key, &QPushButton::clicked, this, [=](bool check) { //
  329. updatePage();
  330. refreshPage();
  331. dumpLog("提交成功");
  332. });
  333. /*******************************************************************************
  334. * *
  335. *******************************************************************************/
  336. connect(ui->storageConfigKey, &QPushButton::clicked, this, [=](bool check) { //
  337. DO(m_clstc->storageConfigs());
  338. dumpLog("保存配置成功");
  339. });
  340. /*******************************************************************************
  341. * *
  342. *******************************************************************************/
  343. connect(ui->rebootDeviceKey, &QPushButton::clicked, this, [=](bool check) { //
  344. DO(m_clstc->reboot());
  345. dumpLog("重启设备成功");
  346. });
  347. /*******************************************************************************
  348. * *
  349. *******************************************************************************/
  350. connect(ui->factoryResetKey, &QPushButton::clicked, this, [=](bool check) { //
  351. DO(m_clstc->factoryReset());
  352. dumpLog("恢复出厂设置成功");
  353. });
  354. /*******************************************************************************
  355. * ?? *
  356. *******************************************************************************/
  357. ui->RegAdd->setText("0x00000000");
  358. connect(ui->regReadKey, &QPushButton::clicked, this, [=](bool check) { //
  359. uint32_t addr = str2int(ui->RegAdd->text());
  360. uint32_t value = 0;
  361. DO(m_clstc->reg_read(addr, value, 100));
  362. ui->regReadbakVal->setText(fmt("0x%08X", value));
  363. dumpLog(fmt("读取0x%04x成功", addr));
  364. });
  365. connect(ui->regWriteKey, &QPushButton::clicked, this, [=](bool check) { //
  366. uint32_t addr = str2int(ui->RegAdd->text());
  367. uint32_t value = str2int(ui->regWriteVal->text());
  368. uint32_t readkbak = 0;
  369. DO(m_clstc->reg_write(addr, value, readkbak, 100));
  370. ui->regReadbakVal->setText(fmt("0x%04x", readkbak));
  371. dumpLog(fmt("写入0x%08x成功", addr));
  372. });
  373. connect(ui->InterClk_trigger_Key, &QPushButton::clicked, this, [=](bool check) { //
  374. DO(m_clstc->InterClk_trigger());
  375. dumpLog(fmt("触发成功"));
  376. });
  377. connect(ui->InterClk_stop_Key, &QPushButton::clicked, this, [=](bool check) { //
  378. DO(m_clstc->InterClk_stop());
  379. dumpLog(fmt("停止触发成功"));
  380. });
  381. /*******************************************************************************
  382. * *
  383. *******************************************************************************/
  384. ui->TriInX_SrcSelect_Val_1->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  385. ui->TriInX_SrcSelect_Val_1->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  386. ui->TriInX_Mode_Val_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  387. ui->TriInX_Mode_Val_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  388. ui->TriInX_TriggerModeTriggerEdge_Val_1->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  389. ui->TriInX_TriggerModeTriggerEdge_Val_1->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  390. ui->TriInX_SrcSelect_Val_2->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  391. ui->TriInX_SrcSelect_Val_2->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  392. ui->TriInX_Mode_Val_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  393. ui->TriInX_Mode_Val_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  394. ui->TriInX_TriggerModeTriggerEdge_Val_2->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  395. ui->TriInX_TriggerModeTriggerEdge_Val_2->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  396. ui->TriInX_SrcSelect_Val_3->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  397. ui->TriInX_SrcSelect_Val_3->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  398. ui->TriInX_Mode_Val_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  399. ui->TriInX_Mode_Val_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  400. ui->TriInX_TriggerModeTriggerEdge_Val_3->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  401. ui->TriInX_TriggerModeTriggerEdge_Val_3->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  402. ui->TriInX_SrcSelect_Val_4->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString()));
  403. ui->TriInX_SrcSelect_Val_4->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString()));
  404. ui->TriInX_Mode_Val_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString()));
  405. ui->TriInX_Mode_Val_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString()));
  406. ui->TriInX_TriggerModeTriggerEdge_Val_4->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString()));
  407. ui->TriInX_TriggerModeTriggerEdge_Val_4->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString()));
  408. ui->TriInX_InSignalFreq_Val_1->setDisabled(true);
  409. ui->TriInX_InSignalFreq_Val_2->setDisabled(true);
  410. ui->TriInX_InSignalFreq_Val_3->setDisabled(true);
  411. ui->TriInX_InSignalFreq_Val_4->setDisabled(true);
  412. ui->TriInX_OutSignalFreq_Val_1->setDisabled(true);
  413. ui->TriInX_OutSignalFreq_Val_2->setDisabled(true);
  414. ui->TriInX_OutSignalFreq_Val_3->setDisabled(true);
  415. ui->TriInX_OutSignalFreq_Val_4->setDisabled(true);
  416. /*******************************************************************************
  417. * *
  418. *******************************************************************************/
  419. QStringList LightSrcX_TriSrc_QStringList;
  420. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::LOGIC0).toString()));
  421. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::LOGIC1).toString()));
  422. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER).toString()));
  423. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I1).toString()));
  424. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I2).toString()));
  425. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I3).toString()));
  426. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::INTERNAL_TRIGGER_I4).toString()));
  427. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1).toString()));
  428. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I1).toString()));
  429. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I2).toString()));
  430. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I3).toString()));
  431. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_1_I4).toString()));
  432. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2).toString()));
  433. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I1).toString()));
  434. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I2).toString()));
  435. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I3).toString()));
  436. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_2_I4).toString()));
  437. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3).toString()));
  438. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I1).toString()));
  439. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I2).toString()));
  440. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I3).toString()));
  441. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_3_I4).toString()));
  442. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4).toString()));
  443. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I1).toString()));
  444. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I2).toString()));
  445. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I3).toString()));
  446. LightSrcX_TriSrc_QStringList.append(QString::fromStdString(InternalSig(InternalSig::EXT_TRIGGER_4_I4).toString()));
  447. ui->LightSrcX_TriSrc_1->addItems(LightSrcX_TriSrc_QStringList);
  448. ui->LightSrcX_TriSrc_2->addItems(LightSrcX_TriSrc_QStringList);
  449. ui->LightSrcX_TriSrc_3->addItems(LightSrcX_TriSrc_QStringList);
  450. ui->LightSrcX_TriSrc_4->addItems(LightSrcX_TriSrc_QStringList);
  451. ui->LightSrcX_InSigFreqDetect_1->setDisabled(true);
  452. ui->LightSrcX_InSigFreqDetect_2->setDisabled(true);
  453. ui->LightSrcX_InSigFreqDetect_3->setDisabled(true);
  454. ui->LightSrcX_InSigFreqDetect_4->setDisabled(true);
  455. ui->LightSrcX_OutSigFreqDetect_1->setDisabled(true);
  456. ui->LightSrcX_OutSigFreqDetect_2->setDisabled(true);
  457. ui->LightSrcX_OutSigFreqDetect_3->setDisabled(true);
  458. ui->LightSrcX_OutSigFreqDetect_4->setDisabled(true);
  459. ui->LightSrcX_LightSrcErrorState_1->setDisabled(true);
  460. ui->LightSrcX_LightSrcErrorState_2->setDisabled(true);
  461. ui->LightSrcX_LightSrcErrorState_3->setDisabled(true);
  462. ui->LightSrcX_LightSrcErrorState_4->setDisabled(true);
  463. ui->LightSrcX_LightDriverFreq_1->setDisabled(true);
  464. ui->LightSrcX_LightDriverFreq_2->setDisabled(true);
  465. ui->LightSrcX_LightDriverFreq_3->setDisabled(true);
  466. ui->LightSrcX_LightDriverFreq_4->setDisabled(true);
  467. }
  468. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
  469. // G_SerialPort.moveToThread();
  470. // QObject::connect(&G_SerialPortThread, &QThread::started, &G_SerialPort, &QSerialPort::open);
  471. G_QTDataChannel.init();
  472. CLSTControler::ins()->initialize(&G_QTDataChannel);
  473. m_clstc = CLSTControler::ins();
  474. ui->setupUi(this);
  475. m_mainWindow = this;
  476. qRegisterMetaType<int32_t>("int32_t");
  477. qRegisterMetaType<uint32_t>("uint32_t");
  478. qRegisterMetaType<function<void()>>("function<void()>");
  479. qRegisterMetaType<QFunction>("QFunction");
  480. // qInstallMessageHandler(log_output);
  481. connect(this, SIGNAL(doinui_signal(QFunction)), this, SLOT(doinui_slot(QFunction)));
  482. constructUI();
  483. // 创建定时器
  484. timer = new QTimer(this);
  485. connect(timer, &QTimer::timeout, this, [this]() { refreshReadonlyPage(); });
  486. timer->setInterval(1000); // 每隔一秒触发一次
  487. timer->start();
  488. // m_clstc->regRawDataListener([this](uart_message_type_t type, uint8_t *data, size_t len) {
  489. // QString text;
  490. // if (type == kuart_raw_tx) {
  491. // text.append("TX: ");
  492. // for (size_t i = 0; i < len; i++) {
  493. // text.append(fmt("%02X ", data[i]));
  494. // }
  495. // } else if (type == kuart_raw_rx) {
  496. // text.append("RX: ");
  497. // for (size_t i = 0; i < len; i++) {
  498. // text.append(fmt("%02X ", data[i]));
  499. // }
  500. // }
  501. // emit doinui_signal(QFunction([this, text]() {
  502. // if (ui->instructionPreview->document()->lineCount() > 100) {
  503. // ui->instructionPreview->document()->clear();
  504. // }
  505. // ui->instructionPreview->append(text);
  506. // }));
  507. // });
  508. }
  509. void MainWindow::dumpLog(const char *fmt, ...) {
  510. va_list args;
  511. va_start(args, fmt);
  512. char buf[1024] = {0};
  513. vsnprintf(buf, sizeof(buf), fmt, args);
  514. qDebug() << buf;
  515. va_end(args);
  516. QString text(buf);
  517. QString info;
  518. // zos_get_ticket
  519. info.append(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"));
  520. info.append(" [Info]:");
  521. info.append(text);
  522. emit doinui_signal(QFunction([this, info]() {
  523. if (ui->instructionPreview->document()->lineCount() > 100) {
  524. ui->instructionPreview->document()->clear();
  525. }
  526. ui->instructionPreview->append(info);
  527. }));
  528. }
  529. MainWindow::~MainWindow() { delete ui; }