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.

815 lines
44 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years 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. #include "mainwindow.h"
  2. #include <QDateTime>
  3. #include <QtConcurrent>
  4. #include "./ui_mainwindow.h"
  5. using namespace iflytop;
  6. using namespace xsync;
  7. using namespace std;
  8. static MainWindow *m_mainWindow;
  9. #define TAG "MainWindow"
  10. static const char *fmt(const char *fmt, ...) {
  11. va_list args;
  12. va_start(args, fmt);
  13. static char buf[1024] = {0};
  14. vsnprintf(buf, sizeof(buf), fmt, args);
  15. va_end(args);
  16. return buf;
  17. }
  18. static const uint32_t str2int(QString str) {
  19. // 如果0x开头,按16进制转换
  20. // 如果0b开头,按2进制转换
  21. // 否则按10进制转换
  22. // 去除掉str中_
  23. str.remove("_");
  24. if (str.startsWith("0x")) {
  25. return str.toUInt(nullptr, 16);
  26. } else if (str.startsWith("0b")) {
  27. // remove 0b
  28. str.remove(0, 2);
  29. return str.toUInt(nullptr, 2);
  30. } else {
  31. return str.toUInt(nullptr, 10);
  32. }
  33. }
  34. void MainWindow::log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
  35. QString text;
  36. text.append(msg);
  37. m_mainWindow->append_log_signal(text);
  38. }
  39. void MainWindow::append_log_slot(QString text) { ui->logbrowser->append(text); }
  40. void MainWindow::updateUI_timeCodeInfo_slot(QString text) { ui->TimecodeDisplayer->setText(text); }
  41. void MainWindow::updateUI_cameraSyncInfo_slot(QString text) { ui->CameraSyncIndex->setText(text); }
  42. void MainWindow::updateUI_reg_slot(int32_t regadd, uint32_t regval) {
  43. auto it = m_regdisplayer.find(regadd);
  44. if (it != m_regdisplayer.end()) {
  45. ZLOGI(TAG, "updateUI_reg_slot %x %d", regadd, regval);
  46. it->second->regBrowser->setText(QString::number(regval, 16));
  47. }
  48. }
  49. void MainWindow::doinui_slot(QFunction func) {
  50. if (func.get()) func.get()();
  51. }
  52. void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag, reg_val_type_t regvaltype) {
  53. DispalyRegIterm *regitem = new DispalyRegIterm();
  54. regitem->regvaltype = regvaltype;
  55. {
  56. auto *label = new QLabel(parent);
  57. label->setObjectName(QString::fromUtf8("label"));
  58. label->setText(QString(fmt("%s(0x%04x)", regname, regadd)));
  59. QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::Expanding);
  60. sizePolicy1.setHorizontalStretch(0);
  61. sizePolicy1.setVerticalStretch(0);
  62. sizePolicy1.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
  63. label->setSizePolicy(sizePolicy1);
  64. label->setMinimumSize(QSize(300, 0));
  65. label->setMaximumSize(QSize(16777215, 16777215));
  66. ui->reg_table->addWidget(label, off, 0, 1, 1);
  67. regitem->label = label;
  68. }
  69. {
  70. auto *textbrowser = new QTextBrowser(parent);
  71. textbrowser->setObjectName(QString::fromUtf8("textbrowser"));
  72. textbrowser->setEnabled(true);
  73. textbrowser->setText(QString("unset"));
  74. QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  75. sizePolicy.setHorizontalStretch(0);
  76. sizePolicy.setVerticalStretch(0);
  77. sizePolicy.setHeightForWidth(textbrowser->sizePolicy().hasHeightForWidth());
  78. textbrowser->setSizePolicy(sizePolicy);
  79. textbrowser->setMaximumSize(QSize(16777215, 16777215));
  80. ui->reg_table->addWidget(textbrowser, off, 1, 1, 1);
  81. regitem->regBrowser = textbrowser;
  82. }
  83. {
  84. auto *textEdit = new QTextEdit(parent);
  85. textEdit->setObjectName(QString::fromUtf8("textEdit"));
  86. textEdit->setEnabled(true);
  87. QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  88. sizePolicy.setHorizontalStretch(0);
  89. sizePolicy.setVerticalStretch(0);
  90. sizePolicy.setHeightForWidth(textEdit->sizePolicy().hasHeightForWidth());
  91. textEdit->setSizePolicy(sizePolicy);
  92. textEdit->setMaximumSize(QSize(16777215, 16777215));
  93. ui->reg_table->addWidget(textEdit, off, 2, 1, 1);
  94. regitem->regEditer = textEdit;
  95. }
  96. {
  97. // new button
  98. auto *button = new QPushButton(parent);
  99. button->setObjectName(QString::fromUtf8("button"));
  100. button->setText(QString("Write"));
  101. QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  102. sizePolicy.setHorizontalStretch(0);
  103. sizePolicy.setVerticalStretch(0);
  104. sizePolicy.setHeightForWidth(button->sizePolicy().hasHeightForWidth());
  105. button->setSizePolicy(sizePolicy);
  106. // connect(this,
  107. connect(button, &QPushButton::clicked, [this, regadd](bool) { //
  108. QString regval_str = m_regdisplayer[regadd]->regEditer->toPlainText();
  109. uint32_t regval = str2int(regval_str);
  110. ZLOGI(TAG, "write reg 0x%04x %d", regadd, regval);
  111. uint32_t readbackval = 0;
  112. auto ecode = Xsync::Ins().reg_write(regadd, regval, readbackval);
  113. if (ecode == kxs_ec_success) {
  114. ZLOGI(TAG, "write reg 0x%04x %d success", regadd, regval);
  115. m_regdisplayer[regadd]->regvalcache = readbackval;
  116. updateUI_reg(regadd);
  117. } else {
  118. ZLOGE(TAG, "write reg 0x%04x %d fail,ecode:%s", regadd, regval, xs_error_code_2_str(ecode));
  119. }
  120. });
  121. regitem->writerButton = button;
  122. ui->reg_table->addWidget(button, off, 3, 1, 1);
  123. }
  124. m_regdisplayer[regadd] = regitem;
  125. }
  126. void MainWindow::updateUI_reg(uint32_t regoff) {
  127. // m_regdisplayer[regoff]->regBrowser->setText("0x" + QString::number(regValue, 16));
  128. uint32_t regval = m_regdisplayer[regoff]->regvalcache;
  129. auto *regBrowser = m_regdisplayer[regoff]->regBrowser;
  130. reg_val_type_t regvaltype = m_regdisplayer[regoff]->regvaltype;
  131. if (regvaltype == kreg_val_type_dotted_hex) {
  132. regBrowser->setText(QString(fmt("%02x.%02x.%02x.%02x", (regval >> 0) & 0xff, (regval >> 8) & 0xff, (regval >> 16) & 0xff, (regval >> 24) & 0xff)));
  133. } else if (regvaltype == kreg_val_type_dotted_decimal) {
  134. regBrowser->setText(QString(fmt("%d.%d.%d.%d", (regval >> 0) & 0xff, (regval >> 8) & 0xff, (regval >> 16) & 0xff, (regval >> 24) & 0xff)));
  135. } else if (regvaltype == kreg_val_type_str) {
  136. char text[5] = {0};
  137. memcpy(text, &regval, 4);
  138. regBrowser->setText(QString(text));
  139. } else if (regvaltype == kreg_val_type_hex) {
  140. regBrowser->setText(QString(fmt("0x%08x", regval)));
  141. } else if (regvaltype == kreg_val_type_decimal) {
  142. regBrowser->setText(QString::number(regval, 10));
  143. } else if (regvaltype == kreg_val_type_binary) {
  144. regBrowser->setText(QString::number(regval, 2));
  145. }
  146. }
  147. void MainWindow::construct_reg_table() { //
  148. int regoff = 1;
  149. push_reg(ui->gridLayoutWidget, regoff++, "software_version", reg::ksoftware_version, 0, kreg_val_type_dotted_decimal);
  150. push_reg(ui->gridLayoutWidget, regoff++, "manufacturer0", reg::kmanufacturer0, 0, kreg_val_type_str);
  151. push_reg(ui->gridLayoutWidget, regoff++, "manufacturer1", reg::kmanufacturer1, 0, kreg_val_type_str);
  152. push_reg(ui->gridLayoutWidget, regoff++, "product_type_id", reg::kproduct_type_id, 0, kreg_val_type_decimal);
  153. push_reg(ui->gridLayoutWidget, regoff++, "sn_id0", reg::ksn_id0, 0, kreg_val_type_dotted_hex);
  154. push_reg(ui->gridLayoutWidget, regoff++, "sn_id1", reg::ksn_id1, 0, kreg_val_type_dotted_hex);
  155. push_reg(ui->gridLayoutWidget, regoff++, "sn_id2", reg::ksn_id2, 0, kreg_val_type_dotted_hex);
  156. push_reg(ui->gridLayoutWidget, regoff++, "mac0", reg::kmac0, 0, kreg_val_type_dotted_hex);
  157. push_reg(ui->gridLayoutWidget, regoff++, "mac1", reg::kmac1, 0, kreg_val_type_dotted_hex);
  158. push_reg(ui->gridLayoutWidget, regoff++, "stm32_ip", reg::kstm32_ip, 0, kreg_val_type_dotted_decimal);
  159. push_reg(ui->gridLayoutWidget, regoff++, "stm32_gw", reg::kstm32_gw, 0, kreg_val_type_dotted_decimal);
  160. push_reg(ui->gridLayoutWidget, regoff++, "stm32_netmask", reg::kstm32_netmask, 0, kreg_val_type_dotted_decimal);
  161. push_reg(ui->gridLayoutWidget, regoff++, "stm32_camera_sync_signal_count", reg::kstm32_camera_sync_signal_count, 0, kreg_val_type_decimal);
  162. push_reg(ui->gridLayoutWidget, regoff++, "fpga_reg_test_reg0", reg::kfpga_info_reg0, 0, kreg_val_type_hex);
  163. push_reg(ui->gridLayoutWidget, regoff++, "fpga_reg_test_reg1", reg::kfpga_info_reg1, 0, kreg_val_type_hex);
  164. push_reg(ui->gridLayoutWidget, regoff++, "fpga_reg_test_reg2", reg::kfpga_info_reg2, 0, kreg_val_type_hex);
  165. push_reg(ui->gridLayoutWidget, regoff++, "fpga_reg_test_reg3", reg::kfpga_info_reg3, 0, kreg_val_type_hex);
  166. push_reg(ui->gridLayoutWidget, regoff++, "fpga_reg_test_reg4", reg::kfpga_info_reg4, 0, kreg_val_type_hex);
  167. push_reg(ui->gridLayoutWidget, regoff++, "ttlin_module", reg::k_ttlin_module, 0, kreg_val_type_hex);
  168. push_reg(ui->gridLayoutWidget, regoff++, "ttlin_en_reg", reg::k_ttlin_en_reg, 0, kreg_val_type_decimal);
  169. push_reg(ui->gridLayoutWidget, regoff++, "ttlin1_freq_detector_reg", reg::k_ttlin1_freq_detector_reg, 0, kreg_val_type_decimal);
  170. push_reg(ui->gridLayoutWidget, regoff++, "ttlin2_freq_detector_reg", reg::k_ttlin2_freq_detector_reg, 0, kreg_val_type_decimal);
  171. push_reg(ui->gridLayoutWidget, regoff++, "ttlin3_freq_detector_reg", reg::k_ttlin3_freq_detector_reg, 0, kreg_val_type_decimal);
  172. push_reg(ui->gridLayoutWidget, regoff++, "ttlin4_freq_detector_reg", reg::k_ttlin4_freq_detector_reg, 0, kreg_val_type_decimal);
  173. push_reg(ui->gridLayoutWidget, regoff++, "ttlin1_filter_factor_reg", reg::k_ttlin1_filter_factor_reg, 0, kreg_val_type_decimal);
  174. push_reg(ui->gridLayoutWidget, regoff++, "ttlin2_filter_factor_reg", reg::k_ttlin2_filter_factor_reg, 0, kreg_val_type_decimal);
  175. push_reg(ui->gridLayoutWidget, regoff++, "ttlin3_filter_factor_reg", reg::k_ttlin3_filter_factor_reg, 0, kreg_val_type_decimal);
  176. push_reg(ui->gridLayoutWidget, regoff++, "ttlin4_filter_factor_reg", reg::k_ttlin4_filter_factor_reg, 0, kreg_val_type_decimal);
  177. /*******************************************************************************
  178. * TIMECODE输入模块 *
  179. *******************************************************************************/
  180. push_reg(ui->gridLayoutWidget, regoff++, "internal_timecode_module", reg::internal_timecode_module, 0, kreg_val_type_hex);
  181. push_reg(ui->gridLayoutWidget, regoff++, "internal_timecode_en", reg::internal_timecode_en, 0, kreg_val_type_decimal);
  182. push_reg(ui->gridLayoutWidget, regoff++, "internal_timecode_format", reg::internal_timecode_format, 0, kreg_val_type_decimal);
  183. push_reg(ui->gridLayoutWidget, regoff++, "internal_timecode_data0", reg::internal_timecode_data0, 0, kreg_val_type_decimal);
  184. push_reg(ui->gridLayoutWidget, regoff++, "internal_timecode_data1", reg::internal_timecode_data1, 0, kreg_val_type_decimal);
  185. push_reg(ui->gridLayoutWidget, regoff++, "external_timecode_module", reg::external_timecode_module, 0, kreg_val_type_hex);
  186. push_reg(ui->gridLayoutWidget, regoff++, "external_timecode_sig_selt", reg::external_timecode_sig_selt, 0, kreg_val_type_decimal);
  187. push_reg(ui->gridLayoutWidget, regoff++, "external_timecode_format", reg::external_timecode_format, 0, kreg_val_type_decimal);
  188. push_reg(ui->gridLayoutWidget, regoff++, "external_timecode_code0", reg::external_timecode_code0, 0, kreg_val_type_decimal);
  189. push_reg(ui->gridLayoutWidget, regoff++, "external_timecode_code1", reg::external_timecode_code1, 0, kreg_val_type_decimal);
  190. push_reg(ui->gridLayoutWidget, regoff++, "sys_timecode_module", reg::sys_timecode_module, 0, kreg_val_type_hex);
  191. push_reg(ui->gridLayoutWidget, regoff++, "sys_timecode_select", reg::sys_timecode_select, 0, kreg_val_type_decimal);
  192. push_reg(ui->gridLayoutWidget, regoff++, "sys_timecode_format", reg::sys_timecode_format, 0, kreg_val_type_decimal);
  193. push_reg(ui->gridLayoutWidget, regoff++, "sys_timecode_data0", reg::sys_timecode_data0, 0, kreg_val_type_decimal);
  194. push_reg(ui->gridLayoutWidget, regoff++, "sys_timecode_data1", reg::sys_timecode_data1, 0, kreg_val_type_decimal);
  195. push_reg(ui->gridLayoutWidget, regoff++, "timecode_output_module", reg::timecode_output_module, 0, kreg_val_type_hex);
  196. push_reg(ui->gridLayoutWidget, regoff++, "timecode_output_timecode0", reg::timecode_output_timecode0, 0, kreg_val_type_decimal);
  197. push_reg(ui->gridLayoutWidget, regoff++, "timecode_output_timecode1", reg::timecode_output_timecode1, 0, kreg_val_type_decimal);
  198. push_reg(ui->gridLayoutWidget, regoff++, "timecode_output_timecode_format", reg::timecode_output_timecode_format, 0, kreg_val_type_decimal);
  199. push_reg(ui->gridLayoutWidget, regoff++, "timecode_output_bnc_outut_level_select", reg::timecode_output_bnc_outut_level_select, 0, kreg_val_type_decimal);
  200. /*******************************************************************************
  201. * TTL输出模块配置 *
  202. *******************************************************************************/
  203. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_module", reg::kreg_ttlout1_module, 0, kreg_val_type_hex);
  204. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_signal_process_mode", reg::kreg_ttlout1_signal_process_mode, 0, kreg_val_type_decimal);
  205. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_input_signal_select", reg::kreg_ttlout1_input_signal_select, 0, kreg_val_type_decimal);
  206. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_pllout_freq_division_ctrl", reg::kreg_ttlout1_pllout_freq_division_ctrl, 0, kreg_val_type_decimal);
  207. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_pllout_freq_multiplication_ctrl", reg::kreg_ttlout1_pllout_freq_multiplication_ctrl, 0, kreg_val_type_decimal);
  208. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_pllout_polarity_ctrl", reg::kreg_ttlout1_pllout_polarity_ctrl, 0, kreg_val_type_decimal);
  209. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_pllout_trigger_edge_select", reg::kreg_ttlout1_pllout_trigger_edge_select, 0, kreg_val_type_decimal);
  210. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_forward_mode_polarity_ctrl", reg::kreg_ttlout1_forward_mode_polarity_ctrl, 0, kreg_val_type_decimal);
  211. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_freq_detect_bias", reg::kreg_ttlout1_freq_detect_bias, 0, kreg_val_type_decimal);
  212. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_placeholder0", reg::kreg_ttlout1_placeholder0, 0, kreg_val_type_decimal);
  213. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_sig_in_freq_detect", reg::kreg_ttlout1_sig_in_freq_detect, 0, kreg_val_type_decimal);
  214. push_reg(ui->gridLayoutWidget, regoff++, "ttlout1_sig_out_freq_detect", reg::kreg_ttlout1_sig_out_freq_detect, 0, kreg_val_type_decimal);
  215. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_module", reg::kreg_ttlout2_module, 0, kreg_val_type_hex);
  216. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_signal_process_mode", reg::kreg_ttlout2_signal_process_mode, 0, kreg_val_type_decimal);
  217. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_input_signal_select", reg::kreg_ttlout2_input_signal_select, 0, kreg_val_type_decimal);
  218. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_pllout_freq_division_ctrl", reg::kreg_ttlout2_pllout_freq_division_ctrl, 0, kreg_val_type_decimal);
  219. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_pllout_freq_multiplication_ctrl", reg::kreg_ttlout2_pllout_freq_multiplication_ctrl, 0, kreg_val_type_decimal);
  220. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_pllout_polarity_ctrl", reg::kreg_ttlout2_pllout_polarity_ctrl, 0, kreg_val_type_decimal);
  221. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_pllout_trigger_edge_select", reg::kreg_ttlout2_pllout_trigger_edge_select, 0, kreg_val_type_decimal);
  222. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_forward_mode_polarity_ctrl", reg::kreg_ttlout2_forward_mode_polarity_ctrl, 0, kreg_val_type_decimal);
  223. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_freq_detect_bias", reg::kreg_ttlout2_freq_detect_bias, 0, kreg_val_type_decimal);
  224. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_placeholder0", reg::kreg_ttlout2_placeholder0, 0, kreg_val_type_decimal);
  225. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_sig_in_freq_detect", reg::kreg_ttlout2_sig_in_freq_detect, 0, kreg_val_type_decimal);
  226. push_reg(ui->gridLayoutWidget, regoff++, "ttlout2_sig_out_freq_detect", reg::kreg_ttlout2_sig_out_freq_detect, 0, kreg_val_type_decimal);
  227. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_module", reg::kreg_ttlout3_module, 0, kreg_val_type_hex);
  228. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_signal_process_mode", reg::kreg_ttlout3_signal_process_mode, 0, kreg_val_type_decimal);
  229. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_input_signal_select", reg::kreg_ttlout3_input_signal_select, 0, kreg_val_type_decimal);
  230. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_pllout_freq_division_ctrl", reg::kreg_ttlout3_pllout_freq_division_ctrl, 0, kreg_val_type_decimal);
  231. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_pllout_freq_multiplication_ctrl", reg::kreg_ttlout3_pllout_freq_multiplication_ctrl, 0, kreg_val_type_decimal);
  232. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_pllout_polarity_ctrl", reg::kreg_ttlout3_pllout_polarity_ctrl, 0, kreg_val_type_decimal);
  233. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_pllout_trigger_edge_select", reg::kreg_ttlout3_pllout_trigger_edge_select, 0, kreg_val_type_decimal);
  234. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_forward_mode_polarity_ctrl", reg::kreg_ttlout3_forward_mode_polarity_ctrl, 0, kreg_val_type_decimal);
  235. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_freq_detect_bias", reg::kreg_ttlout3_freq_detect_bias, 0, kreg_val_type_decimal);
  236. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_placeholder0", reg::kreg_ttlout3_placeholder0, 0, kreg_val_type_decimal);
  237. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_sig_in_freq_detect", reg::kreg_ttlout3_sig_in_freq_detect, 0, kreg_val_type_decimal);
  238. push_reg(ui->gridLayoutWidget, regoff++, "ttlout3_sig_out_freq_detect", reg::kreg_ttlout3_sig_out_freq_detect, 0, kreg_val_type_decimal);
  239. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_module", reg::kreg_ttlout4_module, 0, kreg_val_type_hex);
  240. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_signal_process_mode", reg::kreg_ttlout4_signal_process_mode, 0, kreg_val_type_decimal);
  241. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_input_signal_select", reg::kreg_ttlout4_input_signal_select, 0, kreg_val_type_decimal);
  242. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_pllout_freq_division_ctrl", reg::kreg_ttlout4_pllout_freq_division_ctrl, 0, kreg_val_type_decimal);
  243. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_pllout_freq_multiplication_ctrl", reg::kreg_ttlout4_pllout_freq_multiplication_ctrl, 0, kreg_val_type_decimal);
  244. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_pllout_polarity_ctrl", reg::kreg_ttlout4_pllout_polarity_ctrl, 0, kreg_val_type_decimal);
  245. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_pllout_trigger_edge_select", reg::kreg_ttlout4_pllout_trigger_edge_select, 0, kreg_val_type_decimal);
  246. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_forward_mode_polarity_ctrl", reg::kreg_ttlout4_forward_mode_polarity_ctrl, 0, kreg_val_type_decimal);
  247. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_freq_detect_bias", reg::kreg_ttlout4_freq_detect_bias, 0, kreg_val_type_decimal);
  248. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_placeholder0", reg::kreg_ttlout4_placeholder0, 0, kreg_val_type_decimal);
  249. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_sig_in_freq_detect", reg::kreg_ttlout4_sig_in_freq_detect, 0, kreg_val_type_decimal);
  250. push_reg(ui->gridLayoutWidget, regoff++, "ttlout4_sig_out_freq_detect", reg::kreg_ttlout4_sig_out_freq_detect, 0, kreg_val_type_decimal);
  251. push_reg(ui->gridLayoutWidget, regoff++, "external_genlock_module", reg::external_genlock_module, 0, kreg_val_type_hex);
  252. push_reg(ui->gridLayoutWidget, regoff++, "external_genlock_freq_detect_bias", reg::external_genlock_freq_detect_bias, 0, kreg_val_type_decimal);
  253. push_reg(ui->gridLayoutWidget, regoff++, "external_genlock_freq", reg::external_genlock_freq, 0, kreg_val_type_decimal);
  254. push_reg(ui->gridLayoutWidget, regoff++, "internal_genlock_module", reg::internal_genlock_module, 0, kreg_val_type_hex);
  255. push_reg(ui->gridLayoutWidget, regoff++, "internal_genlock_ctrl_mode", reg::internal_genlock_ctrl_mode, 0, kreg_val_type_decimal);
  256. push_reg(ui->gridLayoutWidget, regoff++, "internal_genlock_en", reg::internal_genlock_en, 0, kreg_val_type_decimal);
  257. push_reg(ui->gridLayoutWidget, regoff++, "internal_genlock_format", reg::internal_genlock_format, 0, kreg_val_type_decimal);
  258. push_reg(ui->gridLayoutWidget, regoff++, "internal_genlock_freq", reg::internal_genlock_freq, 0, kreg_val_type_decimal);
  259. push_reg(ui->gridLayoutWidget, regoff++, "sys_genlock_module", reg::sys_genlock_module, 0, kreg_val_type_hex);
  260. push_reg(ui->gridLayoutWidget, regoff++, "sys_genlock_source", reg::sys_genlock_source, 0, kreg_val_type_decimal);
  261. push_reg(ui->gridLayoutWidget, regoff++, "sys_genlock_freq_detect_bias", reg::sys_genlock_freq_detect_bias, 0, kreg_val_type_decimal);
  262. push_reg(ui->gridLayoutWidget, regoff++, "sys_genlock_freq", reg::sys_genlock_freq, 0, kreg_val_type_decimal);
  263. push_reg(ui->gridLayoutWidget, regoff++, "internal_clock_module", reg::internal_clock_module, 0, kreg_val_type_hex);
  264. push_reg(ui->gridLayoutWidget, regoff++, "internal_clock_ctrl_mode", reg::internal_clock_ctrl_mode, 0, kreg_val_type_decimal);
  265. push_reg(ui->gridLayoutWidget, regoff++, "internal_clock_en", reg::internal_clock_en, 0, kreg_val_type_decimal);
  266. push_reg(ui->gridLayoutWidget, regoff++, "internal_clock_freq", reg::internal_clock_freq, 0, kreg_val_type_decimal);
  267. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_module", reg::sys_clock_module, 0, kreg_val_type_hex);
  268. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_source", reg::sys_clock_source, 0, kreg_val_type_decimal);
  269. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_freq_division_ctrl", reg::sys_clock_freq_division_ctrl, 0, kreg_val_type_decimal);
  270. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_freq_multiplication_ctrl", reg::sys_clock_freq_multiplication_ctrl, 0, kreg_val_type_decimal);
  271. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_freq_detect_bias", reg::sys_clock_freq_detect_bias, 0, kreg_val_type_decimal);
  272. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_trigger_edge_select", reg::sys_clock_trigger_edge_select, 0, kreg_val_type_decimal);
  273. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_infreq_detect", reg::sys_clock_infreq_detect, 0, kreg_val_type_decimal);
  274. push_reg(ui->gridLayoutWidget, regoff++, "sys_clock_outfreq_detect", reg::sys_clock_outfreq_detect, 0, kreg_val_type_decimal);
  275. auto qrect = ui->gridLayoutWidget->geometry();
  276. qrect.setHeight(31 * regoff - 1);
  277. ui->scrollAreaWidgetContents->setMinimumHeight(31 * (regoff + 10) - 1);
  278. ui->gridLayoutWidget->setGeometry(qrect);
  279. }
  280. //
  281. void MainWindow::UI_TimecodePageConstruct() {
  282. ui->InternalTimecode_Format->clear();
  283. for (auto &str : TimecodeFormatStrSet()) {
  284. ui->InternalTimecode_Format->addItem(QString::fromStdString(str));
  285. }
  286. ui->ExternalTimecode_Format->clear();
  287. for (auto &str : TimecodeFormatStrSet()) {
  288. ui->ExternalTimecode_Format->addItem(QString::fromStdString(str));
  289. }
  290. ui->ExternalTimecode_Source->clear();
  291. ui->ExternalTimecode_Source->addItem(QString::fromStdString(InputInterface2Str(INPUT_IF_TIMECODE_BNC)));
  292. ui->ExternalTimecode_Source->addItem(QString::fromStdString(InputInterface2Str(INPUT_IF_TIMECODE_HEADPHONE)));
  293. ui->SysTimecode_Source->clear();
  294. ui->SysTimecode_Source->addItem(QString::fromStdString("0"));
  295. ui->SysTimecode_Source->addItem(QString::fromStdString("1"));
  296. }
  297. void MainWindow::UI_CameraSyncPacketGeneratorModuleConstruct() {
  298. ui->CameraSyncPacketGeneratorModule_TriggerSig->clear();
  299. for (auto &str : camera_sync_packet_generator_module::TriggerSigTypeStrSet()) {
  300. ui->CameraSyncPacketGeneratorModule_TriggerSig->addItem(QString::fromStdString(str));
  301. }
  302. }
  303. void MainWindow::UI_TTLPageConstruct() {
  304. QStringList list;
  305. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_LOGIC0)));
  306. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_LOGIC1)));
  307. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN1)));
  308. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN2)));
  309. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN3)));
  310. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN4)));
  311. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_SYS_CLK_OUTPUT)));
  312. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_SYS_GENLOCK_OUTPUT)));
  313. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_SYS_TIMECODE_FREQ_OUTPUT)));
  314. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_BUSINESS_RECORD_SIG)));
  315. list.push_back(QString::fromStdString(SignalType2Str(SIGNAL_BUSINESS_RECORD_EXPOSURE_SIG)));
  316. ui->TTLOutputModule_SrcSigType_1->clear();
  317. ui->TTLOutputModule_SrcSigType_1->addItems(list);
  318. ui->TTLOutputModule_SrcSigType_2->clear();
  319. ui->TTLOutputModule_SrcSigType_2->addItems(list);
  320. ui->TTLOutputModule_SrcSigType_3->clear();
  321. ui->TTLOutputModule_SrcSigType_3->addItems(list);
  322. ui->TTLOutputModule_SrcSigType_4->clear();
  323. ui->TTLOutputModule_SrcSigType_4->addItems(list);
  324. }
  325. void MainWindow::UI_GenlockPageConstruct() {
  326. //
  327. // ui->ExternalGenlock_Source->clear();
  328. ui->InternalGenlock_Format->clear();
  329. for (auto &str : GenlockFormatStrSet()) {
  330. ui->InternalGenlock_Format->addItem(QString::fromStdString(str));
  331. }
  332. ui->SysGenlock_Src->clear();
  333. ui->SysGenlock_Src->addItem(QString::fromStdString("0"));
  334. ui->SysGenlock_Src->addItem(QString::fromStdString("1"));
  335. }
  336. void MainWindow::UI_SysClockPageConstruct() {
  337. ui->SysClock_Src->clear();
  338. ui->SysClock_Src->addItem(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN1)));
  339. ui->SysClock_Src->addItem(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN2)));
  340. ui->SysClock_Src->addItem(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN3)));
  341. ui->SysClock_Src->addItem(QString::fromStdString(SignalType2Str(SIGNAL_TTLIN4)));
  342. ui->SysClock_Src->addItem(QString::fromStdString(SignalType2Str(SIGNAL_INTERNAL_CLOCK_SIG)));
  343. ui->SysClock_Src->addItem(QString::fromStdString(SignalType2Str(SIGNAL_SYS_GENLOCK_OUTPUT)));
  344. ui->SysClock_Src->addItem(QString::fromStdString(SignalType2Str(SIGNAL_SYS_TIMECODE_FREQ_OUTPUT)));
  345. }
  346. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
  347. ui->setupUi(this);
  348. m_mainWindow = this;
  349. /**
  350. * @brief UI
  351. */
  352. construct_reg_table();
  353. qInstallMessageHandler(log_output);
  354. UI_TimecodePageConstruct();
  355. UI_CameraSyncPacketGeneratorModuleConstruct();
  356. UI_TTLPageConstruct();
  357. UI_GenlockPageConstruct();
  358. UI_SysClockPageConstruct();
  359. /*******************************************************************************
  360. * *
  361. *******************************************************************************/
  362. qRegisterMetaType<int32_t>("int32_t");
  363. qRegisterMetaType<uint32_t>("uint32_t");
  364. qRegisterMetaType<function<void()>>("function<void()>");
  365. qRegisterMetaType<QFunction>("QFunction");
  366. XSyncUdpFactoryImpl::Ins()->initialize();
  367. connect(this, SIGNAL(append_log_signal(QString)), this, SLOT(append_log_slot(QString)));
  368. connect(this, SIGNAL(updateUI_timeCodeInfo_signal(QString)), this, SLOT(updateUI_timeCodeInfo_slot(QString)));
  369. connect(this, SIGNAL(updateUI_cameraSyncInfo_signal(QString)), this, SLOT(updateUI_cameraSyncInfo_slot(QString)));
  370. connect(this, SIGNAL(updateUI_reg_signal(int32_t, uint32_t)), this, SLOT(updateUI_reg_slot(int32_t, uint32_t)));
  371. connect(this, SIGNAL(doinui_signal(QFunction)), this, SLOT(doinui_slot(QFunction)));
  372. m_thread.reset(new ZQThread("test", [this]() { mainWindowsRun(); }));
  373. m_thread->start();
  374. // m_xsync.reset(new Xsync());
  375. Xsync::Ins().initialize(XSyncUdpFactoryImpl::Ins());
  376. Xsync::Ins().Basic_registerOnTimecodeMsgCallback([this](XsyncTimecode_t *timecode_msg) { //
  377. XsyncTimecode_t timecode = *timecode_msg;
  378. QString text = QString(fmt("%02d:%02d:%02d:%02d", timecode.hour, timecode.minute, timecode.second, timecode.frame));
  379. updateUI_timeCodeInfo_signal(text);
  380. });
  381. Xsync::Ins().Basic_registerOnCameraSyncMsgCallback([this](xysnc_camera_sync_data_t *camera_sync_msg) { //
  382. xysnc_camera_sync_data_t camera_sync_data = *camera_sync_msg;
  383. updateUI_cameraSyncInfo_signal(QString(fmt("%d", camera_sync_data.frameIndex)));
  384. });
  385. Xsync::Ins().Basic_registerOnWorkstateChangeMsgCallback([this](uint32_t workstate) { emit doinui_signal(QFunction([this, workstate]() { ui->WorkState->setText(QString::number(workstate)); })); });
  386. }
  387. MainWindow::~MainWindow() { delete ui; }
  388. #define XS_ASSERT(exptr) \
  389. { \
  390. auto ecode = exptr; \
  391. while (!(ecode == kxs_ec_success)) { \
  392. ZLOGE(TAG, "do: %s fail,ecode:%d", #exptr, ecode); \
  393. ZQThread::sleep(1); \
  394. } \
  395. }
  396. void MainWindow::on_RefreshRegsButton_clicked() { //
  397. ZLOGI(TAG, "on_refreshRegsButton_clicked");
  398. // int32_t _t1, uint32_t _t2
  399. QtConcurrent::run([this]() {
  400. bool suc = true;
  401. for (auto &reg : m_regdisplayer) {
  402. uint32_t regValue = 0;
  403. auto ecode = Xsync::Ins().reg_read(reg.first, regValue);
  404. int regoff = reg.first;
  405. if (ecode == kxs_ec_success) {
  406. ZLOGI(TAG, "reg_read %x success", reg.first);
  407. m_regdisplayer[regoff]->regvalcache = regValue;
  408. emit doinui_signal(QFunction([this, regoff, regValue]() { updateUI_reg(regoff); }));
  409. } else {
  410. emit doinui_signal(QFunction([this, regoff, regValue]() {
  411. m_regdisplayer[regoff]->regvalcache = 0;
  412. m_regdisplayer[regoff]->regBrowser->setText("error");
  413. }));
  414. }
  415. }
  416. });
  417. }
  418. void MainWindow::on_ClearLogButton_clicked() { //
  419. ui->logbrowser->clear();
  420. }
  421. void MainWindow::on_Connect2XsyncButton_clicked() { //
  422. ZLOGI(TAG, "connect %s", ui->IpInput->text().toStdString().c_str());
  423. xs_error_code_t ecode = Xsync::Ins().connect(ui->IpInput->text().toStdString());
  424. ZLOGI(TAG, "connect %s ecode:%s", ui->IpInput->text().toStdString().c_str(), xs_error_code_2_str(ecode));
  425. }
  426. void MainWindow::mainWindowsRun() { //
  427. }
  428. #define DO_XSYNC_FUNC(exptr) \
  429. { \
  430. auto ecode = exptr; \
  431. if (!(ecode == kxs_ec_success)) { \
  432. ZLOGE(TAG, "do: %s fail,ecode:[%d](%s)", #exptr, ecode, xs_error_code_2_str(ecode)); \
  433. return; \
  434. } else { \
  435. ZLOGI(TAG, "do: %s success", #exptr); \
  436. } \
  437. }
  438. void MainWindow::on_GenNewMac_clicked() { DO_XSYNC_FUNC(Xsync::Ins().Basic_generatorNewMac()); }
  439. void MainWindow::on_FactoryReset_clicked() { DO_XSYNC_FUNC(Xsync::Ins().Basic_factoryReset()); }
  440. void MainWindow::on_Reboot_clicked() { DO_XSYNC_FUNC(Xsync::Ins().Basic_reboot()); }
  441. void MainWindow::on_ChangeNetCfg_clicked() { //
  442. DO_XSYNC_FUNC(Xsync::Ins().Basic_changeNetworkConfig(ui->ChangeNetCfg_ip->text().toStdString(), ui->ChangeNetCfg_mask->text().toStdString(), ui->ChangeNetCfg_gateway->text().toStdString()));
  443. }
  444. void MainWindow::on_TimecodePage_Read_clicked() {
  445. TimecodeFormat_t InternalTimecode_Format;
  446. XsyncTimecode_t InternalTimecode_Code;
  447. TimecodeFormat_t ExternalTimecode_Format;
  448. InputInterface_t ExternalTimecode_Source;
  449. XsyncTimecode_t ExternalTimecode_Code;
  450. uint32_t SysTimecode_Source;
  451. TimecodeFormat_t SysTimecode_Format;
  452. XsyncTimecode_t SysTimecode_Code;
  453. DO_XSYNC_FUNC(Xsync::Ins().InternalTimecode_getFormat(InternalTimecode_Format));
  454. DO_XSYNC_FUNC(Xsync::Ins().InternalTimecode_getCode(InternalTimecode_Code));
  455. DO_XSYNC_FUNC(Xsync::Ins().ExternalTimecode_getFormat(ExternalTimecode_Format));
  456. DO_XSYNC_FUNC(Xsync::Ins().ExternalTimecode_getSource(ExternalTimecode_Source));
  457. DO_XSYNC_FUNC(Xsync::Ins().ExternalTimecode_readCode(ExternalTimecode_Code));
  458. DO_XSYNC_FUNC(Xsync::Ins().SysTimecode_getSource(SysTimecode_Source));
  459. DO_XSYNC_FUNC(Xsync::Ins().SysTimecode_readFormat(SysTimecode_Format));
  460. DO_XSYNC_FUNC(Xsync::Ins().SysTimecode_readCode(SysTimecode_Code));
  461. ui->InternalTimecode_Format->setCurrentText(QString::fromStdString(TimecodeFormatToStr(InternalTimecode_Format)));
  462. ui->InternalTimecode_Code->setText(QString(XsyncTimecodeToStr(InternalTimecode_Code).c_str()));
  463. ui->ExternalTimecode_Format->setCurrentText(QString::fromStdString(TimecodeFormatToStr(ExternalTimecode_Format)));
  464. ui->ExternalTimecode_Source->setCurrentText(QString::fromStdString(InputInterface2Str(ExternalTimecode_Source)));
  465. ui->ExternalTimecode_Code->setText(QString(XsyncTimecodeToStr(ExternalTimecode_Code).c_str()));
  466. ui->SysTimecode_Source->setCurrentText(QString::number(SysTimecode_Source));
  467. ui->SysTimecode_Format->setText(QString::fromStdString(TimecodeFormatToStr(SysTimecode_Format)));
  468. ui->SysTimecode_Code->setText(QString(XsyncTimecodeToStr(SysTimecode_Code).c_str()));
  469. }
  470. void MainWindow::on_TimecodePage_Update_clicked() {
  471. TimecodeFormat_t InternalTimecode_Format = Str2TimecodeFormat(ui->InternalTimecode_Format->currentText().toStdString());
  472. XsyncTimecode_t InternalTimecode_Code = Str2XsyncTimecode(ui->InternalTimecode_Code->text().toStdString());
  473. TimecodeFormat_t ExternalTimecode_Format = Str2TimecodeFormat(ui->ExternalTimecode_Format->currentText().toStdString());
  474. InputInterface_t ExternalTimecode_Source = Str2InputInterface(ui->ExternalTimecode_Source->currentText().toStdString());
  475. uint32_t SysTimecode_Source = ui->SysTimecode_Source->currentText().toInt();
  476. DO_XSYNC_FUNC(Xsync::Ins().InternalTimecode_setFormat(InternalTimecode_Format));
  477. DO_XSYNC_FUNC(Xsync::Ins().InternalTimecode_setCode(InternalTimecode_Code));
  478. DO_XSYNC_FUNC(Xsync::Ins().ExternalTimecode_setFormat(ExternalTimecode_Format));
  479. DO_XSYNC_FUNC(Xsync::Ins().ExternalTimecode_setSource(ExternalTimecode_Source));
  480. DO_XSYNC_FUNC(Xsync::Ins().SysTimecode_setSource(SysTimecode_Source));
  481. }
  482. void MainWindow::on_CameraSyncPacketGeneratorModule_Update_clicked() {
  483. auto TriggerSig = camera_sync_packet_generator_module::Str2TriggerSigType(ui->CameraSyncPacketGeneratorModule_TriggerSig->currentText().toStdString());
  484. auto ReportPeriod = ui->CameraSyncPacketGeneratorModule_ReportPeriod->text().toUInt();
  485. DO_XSYNC_FUNC(Xsync::Ins().CameraSyncPacketGeneratorModule_setTriggerSig(TriggerSig));
  486. DO_XSYNC_FUNC(Xsync::Ins().CameraSyncPacketGeneratorModule_setReportPeriod(ReportPeriod));
  487. }
  488. void MainWindow::on_CameraSyncPacketGeneratorModule_Read_clicked() {
  489. camera_sync_packet_generator_module::TriggerSigType_t TriggerSig;
  490. uint32_t ReportPeriod;
  491. uint32_t PacketIndex;
  492. DO_XSYNC_FUNC(Xsync::Ins().CameraSyncPacketGeneratorModule_getTriggerSig(TriggerSig));
  493. DO_XSYNC_FUNC(Xsync::Ins().CameraSyncPacketGeneratorModule_getReportPeriod(ReportPeriod));
  494. DO_XSYNC_FUNC(Xsync::Ins().CameraSyncPacketGeneratorModule_getPacketIndex(PacketIndex));
  495. ui->CameraSyncPacketGeneratorModule_TriggerSig->setCurrentText(QString::fromStdString(camera_sync_packet_generator_module::TriggerSigType2Str(TriggerSig)));
  496. ui->CameraSyncPacketGeneratorModule_ReportPeriod->setText(QString::number(ReportPeriod));
  497. ui->CameraSyncPacketGeneratorModule_PacketIndex->setText(QString::number(PacketIndex));
  498. }
  499. void MainWindow::on_CameraSyncPacketGeneratorModule_ClearPacketIndex_clicked() {
  500. DO_XSYNC_FUNC(Xsync::Ins().CameraSyncPacketGeneratorModule_clearPacketIndex());
  501. on_CameraSyncPacketGeneratorModule_Read_clicked();
  502. }
  503. void MainWindow::on_tabWidget_currentChanged(int index) {
  504. on_RefreshRegsButton_clicked();
  505. on_CameraSyncPacketGeneratorModule_Read_clicked();
  506. on_TimecodePage_Read_clicked();
  507. on_TTLPage_Read_clicked();
  508. }
  509. void MainWindow::on_TTLInputModule_Index_currentIndexChanged(int index) {}
  510. void MainWindow::on_TTLOutputMoudle_ID_currentIndexChanged(int index) {}
  511. void MainWindow::on_TTLPage_Read_clicked() {
  512. {
  513. uint32_t freq1 = 0;
  514. uint32_t freq2 = 0;
  515. uint32_t freq3 = 0;
  516. uint32_t freq4 = 0;
  517. bool En;
  518. DO_XSYNC_FUNC(Xsync::Ins().TTLInputModule1_detectFreq(freq1));
  519. DO_XSYNC_FUNC(Xsync::Ins().TTLInputModule2_detectFreq(freq2));
  520. DO_XSYNC_FUNC(Xsync::Ins().TTLInputModule3_detectFreq(freq3));
  521. DO_XSYNC_FUNC(Xsync::Ins().TTLInputModule4_detectFreq(freq4));
  522. ZLOGI(TAG, "freq1:%d freq2:%d freq3:%d freq4:%d", freq1, freq2, freq3, freq4);
  523. ui->TTLinModule_ttl_freq_1->setText(QString::number(freq1));
  524. ui->TTLinModule_ttl_freq_2->setText(QString::number(freq2));
  525. ui->TTLinModule_ttl_freq_3->setText(QString::number(freq3));
  526. ui->TTLinModule_ttl_freq_4->setText(QString::number(freq4));
  527. }
  528. SignalType_t source;
  529. uint32_t div;
  530. uint32_t multi;
  531. float infreq;
  532. float outfreq;
  533. {
  534. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_getSrcSigType(source));
  535. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_getFreqDivision(div));
  536. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_getFreqMultiplication(multi));
  537. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_readInFreq(infreq));
  538. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_readOutFreq(outfreq));
  539. ui->TTLOutputModule_SrcSigType_1->setCurrentText(QString::fromStdString(SignalType2Str(source)));
  540. ui->TTLOutputModule_FreqDivision_1->setText(QString::number(div));
  541. ui->TTLOutputModule_FreqMultiplication_1->setText(QString::number(multi));
  542. ui->TTLOutputModule_InFreq_1->setText(QString::number(infreq, 'f', 2));
  543. ui->TTLOutputModule_OutFreq_1->setText(QString::number(outfreq, 'f', 2));
  544. }
  545. {
  546. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_getSrcSigType(source));
  547. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_getFreqDivision(div));
  548. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_getFreqMultiplication(multi));
  549. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_readInFreq(infreq));
  550. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_readOutFreq(outfreq));
  551. ui->TTLOutputModule_SrcSigType_2->setCurrentText(QString::fromStdString(SignalType2Str(source)));
  552. ui->TTLOutputModule_FreqDivision_2->setText(QString::number(div));
  553. ui->TTLOutputModule_FreqMultiplication_2->setText(QString::number(multi));
  554. ui->TTLOutputModule_InFreq_2->setText(QString::number(infreq, 'f', 2));
  555. ui->TTLOutputModule_OutFreq_2->setText(QString::number(outfreq, 'f', 2));
  556. }
  557. {
  558. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_getSrcSigType(source));
  559. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_getFreqDivision(div));
  560. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_getFreqMultiplication(multi));
  561. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_readInFreq(infreq));
  562. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_readOutFreq(outfreq));
  563. ui->TTLOutputModule_SrcSigType_3->setCurrentText(QString::fromStdString(SignalType2Str(source)));
  564. ui->TTLOutputModule_FreqDivision_3->setText(QString::number(div));
  565. ui->TTLOutputModule_FreqMultiplication_3->setText(QString::number(multi));
  566. ui->TTLOutputModule_InFreq_3->setText(QString::number(infreq, 'f', 2));
  567. ui->TTLOutputModule_OutFreq_3->setText(QString::number(outfreq, 'f', 2));
  568. }
  569. {
  570. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_getSrcSigType(source));
  571. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_getFreqDivision(div));
  572. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_getFreqMultiplication(multi));
  573. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_readInFreq(infreq));
  574. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_readOutFreq(outfreq));
  575. ui->TTLOutputModule_SrcSigType_4->setCurrentText(QString::fromStdString(SignalType2Str(source)));
  576. ui->TTLOutputModule_FreqDivision_4->setText(QString::number(div));
  577. ui->TTLOutputModule_FreqMultiplication_4->setText(QString::number(multi));
  578. ui->TTLOutputModule_InFreq_4->setText(QString::number(infreq, 'f', 2));
  579. ui->TTLOutputModule_OutFreq_4->setText(QString::number(outfreq, 'f', 2));
  580. }
  581. }
  582. void MainWindow::on_TTLPage_Write_clicked() {
  583. {
  584. auto source = Str2SignalType(ui->TTLOutputModule_SrcSigType_1->currentText().toStdString());
  585. auto div = ui->TTLOutputModule_FreqDivision_1->text().toUInt();
  586. auto multi = ui->TTLOutputModule_FreqMultiplication_1->text().toUInt();
  587. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_setSrcSigType(source));
  588. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_setFreqDivision(div));
  589. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule1_setFreqMultiplication(multi));
  590. }
  591. {
  592. auto source = Str2SignalType(ui->TTLOutputModule_SrcSigType_2->currentText().toStdString());
  593. auto div = ui->TTLOutputModule_FreqDivision_2->text().toUInt();
  594. auto multi = ui->TTLOutputModule_FreqMultiplication_2->text().toUInt();
  595. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_setSrcSigType(source));
  596. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_setFreqDivision(div));
  597. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule2_setFreqMultiplication(multi));
  598. }
  599. {
  600. auto source = Str2SignalType(ui->TTLOutputModule_SrcSigType_3->currentText().toStdString());
  601. auto div = ui->TTLOutputModule_FreqDivision_3->text().toUInt();
  602. auto multi = ui->TTLOutputModule_FreqMultiplication_3->text().toUInt();
  603. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_setSrcSigType(source));
  604. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_setFreqDivision(div));
  605. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule3_setFreqMultiplication(multi));
  606. }
  607. {
  608. auto source = Str2SignalType(ui->TTLOutputModule_SrcSigType_4->currentText().toStdString());
  609. auto div = ui->TTLOutputModule_FreqDivision_4->text().toUInt();
  610. auto multi = ui->TTLOutputModule_FreqMultiplication_4->text().toUInt();
  611. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_setSrcSigType(source));
  612. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_setFreqDivision(div));
  613. DO_XSYNC_FUNC(Xsync::Ins().TTLOutputModule4_setFreqMultiplication(multi));
  614. }
  615. }
  616. void MainWindow::on_GenlockPage_Read_clicked() {
  617. {
  618. GenlockFormat_t format;
  619. DO_XSYNC_FUNC(Xsync::Ins().InternalGenlock_getFormat(format));
  620. ui->InternalGenlock_Format->setCurrentText(QString::fromStdString(GenlockFormatToStr(format)));
  621. }
  622. {
  623. float freq;
  624. DO_XSYNC_FUNC(Xsync::Ins().ExternalGenlock_detectFreq(freq));
  625. ui->ExternalGenlock_Freq->setText(QString::number(freq, 'f', 2));
  626. }
  627. {
  628. uint32_t src;
  629. DO_XSYNC_FUNC(Xsync::Ins().SysGenlock_getSrc(src));
  630. ui->SysGenlock_Src->setCurrentText(QString::number(src));
  631. }
  632. {
  633. float freq;
  634. DO_XSYNC_FUNC(Xsync::Ins().SysGenlock_readFreq(freq));
  635. ui->SysGenlock_Freq->setText(QString::number(freq, 'f', 2));
  636. }
  637. }
  638. void MainWindow::on_GenlockPage_Write_clicked() {
  639. {
  640. auto format = Str2GenlockFormat(ui->InternalGenlock_Format->currentText().toStdString());
  641. DO_XSYNC_FUNC(Xsync::Ins().InternalGenlock_setFormat(format));
  642. }
  643. {
  644. auto src = ui->SysGenlock_Src->currentText().toUInt();
  645. DO_XSYNC_FUNC(Xsync::Ins().SysGenlock_setSrc(src));
  646. }
  647. }
  648. void MainWindow::on_SysClockPage_Read_clicked() {
  649. {
  650. float freq;
  651. DO_XSYNC_FUNC(Xsync::Ins().InternalClock_getFreq(freq));
  652. ui->InternalClock_Freq->setText(QString::number(freq, 'f', 2));
  653. }
  654. {
  655. SignalType_t src;
  656. DO_XSYNC_FUNC(Xsync::Ins().SysClock_getSrc(src));
  657. ui->SysClock_Src->setCurrentText(QString::fromStdString(SignalType2Str(src)));
  658. }
  659. {
  660. uint32_t div;
  661. DO_XSYNC_FUNC(Xsync::Ins().SysClock_geFreqtDivision(div));
  662. ui->SysClock_FreqtDivision->setText(QString::number(div));
  663. }
  664. {
  665. uint32_t multi;
  666. DO_XSYNC_FUNC(Xsync::Ins().SysClock_getFreqMultiplication(multi));
  667. ui->SysClock_FreqMultiplication->setText(QString::number(multi));
  668. }
  669. {
  670. float freq;
  671. DO_XSYNC_FUNC(Xsync::Ins().SysClock_readInSigFreq(freq));
  672. ui->SysClock_InSigFreq->setText(QString::number(freq, 'f', 2));
  673. }
  674. {
  675. float freq;
  676. DO_XSYNC_FUNC(Xsync::Ins().SysClock_readOutSigFreq(freq));
  677. ui->SysClock_OutSigFreq->setText(QString::number(freq, 'f', 2));
  678. }
  679. }
  680. void MainWindow::on_SysClockPage_Wirte_clicked() {
  681. {
  682. auto freq = ui->InternalClock_Freq->text().toFloat();
  683. DO_XSYNC_FUNC(Xsync::Ins().InternalClock_setFreq(freq));
  684. }
  685. {
  686. auto src = Str2SignalType(ui->SysClock_Src->currentText().toStdString());
  687. DO_XSYNC_FUNC(Xsync::Ins().SysClock_setSrc(src));
  688. }
  689. {
  690. auto div = ui->SysClock_FreqtDivision->text().toUInt();
  691. DO_XSYNC_FUNC(Xsync::Ins().SysClock_setFreqDivision(div));
  692. }
  693. {
  694. auto multi = ui->SysClock_FreqMultiplication->text().toUInt();
  695. DO_XSYNC_FUNC(Xsync::Ins().SysClock_setFreqMultiplication(multi));
  696. }
  697. }