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.

154 lines
5.6 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
  1. #include "mainwindow.h"
  2. #include <QDateTime>
  3. #include <QtConcurrent>
  4. #include "./ui_mainwindow.h"
  5. using namespace iflytop;
  6. using namespace std;
  7. static MainWindow *m_mainWindow;
  8. #define TAG "MainWindow"
  9. void MainWindow::log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
  10. QString text;
  11. text.append(msg);
  12. m_mainWindow->append_log_signal(text);
  13. }
  14. void MainWindow::append_log_slot(QString text) { ui->logbrowser->append(text); }
  15. void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag) {
  16. DispalyRegIterm *regitem = new DispalyRegIterm();
  17. {
  18. auto *label = new QLabel(parent);
  19. label->setObjectName(QString::fromUtf8("label"));
  20. label->setText(QString(regname));
  21. QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::Expanding);
  22. sizePolicy1.setHorizontalStretch(0);
  23. sizePolicy1.setVerticalStretch(0);
  24. sizePolicy1.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
  25. label->setSizePolicy(sizePolicy1);
  26. label->setMinimumSize(QSize(100, 0));
  27. label->setMaximumSize(QSize(16777215, 16777215));
  28. ui->reg_table->addWidget(label, off, 0, 1, 1);
  29. regitem->label = label;
  30. }
  31. {
  32. auto *textbrowser = new QTextBrowser(parent);
  33. textbrowser->setObjectName(QString::fromUtf8("textbrowser"));
  34. textbrowser->setEnabled(true);
  35. textbrowser->setText(QString("demo"));
  36. QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  37. sizePolicy.setHorizontalStretch(0);
  38. sizePolicy.setVerticalStretch(0);
  39. sizePolicy.setHeightForWidth(textbrowser->sizePolicy().hasHeightForWidth());
  40. textbrowser->setSizePolicy(sizePolicy);
  41. textbrowser->setMaximumSize(QSize(16777215, 16777215));
  42. ui->reg_table->addWidget(textbrowser, off, 1, 1, 1);
  43. regitem->regBrowser = textbrowser;
  44. }
  45. {
  46. auto *textEdit = new QTextEdit(parent);
  47. textEdit->setObjectName(QString::fromUtf8("textEdit"));
  48. textEdit->setEnabled(true);
  49. QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  50. sizePolicy.setHorizontalStretch(0);
  51. sizePolicy.setVerticalStretch(0);
  52. sizePolicy.setHeightForWidth(textEdit->sizePolicy().hasHeightForWidth());
  53. textEdit->setSizePolicy(sizePolicy);
  54. textEdit->setMaximumSize(QSize(16777215, 16777215));
  55. ui->reg_table->addWidget(textEdit, off, 2, 1, 1);
  56. regitem->regEditer = textEdit;
  57. }
  58. {
  59. // new button
  60. auto *button = new QPushButton(parent);
  61. button->setObjectName(QString::fromUtf8("button"));
  62. button->setText(QString("Write"));
  63. QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  64. sizePolicy.setHorizontalStretch(0);
  65. sizePolicy.setVerticalStretch(0);
  66. sizePolicy.setHeightForWidth(button->sizePolicy().hasHeightForWidth());
  67. button->setSizePolicy(sizePolicy);
  68. regitem->writerButton = button;
  69. ui->reg_table->addWidget(button, off, 3, 1, 1);
  70. }
  71. m_regdisplayer[regadd] = regitem;
  72. }
  73. void MainWindow::construct_reg_table() { //
  74. push_reg(ui->gridLayoutWidget, 1, "reg0", 0x1000, 0);
  75. push_reg(ui->gridLayoutWidget, 2, "reg1", 0x1001, 0);
  76. push_reg(ui->gridLayoutWidget, 3, "reg1", 0x1002, 0);
  77. push_reg(ui->gridLayoutWidget, 4, "reg1", 0x1003, 0);
  78. push_reg(ui->gridLayoutWidget, 5, "reg1", 0x1004, 0);
  79. auto qrect = ui->gridLayoutWidget->geometry();
  80. qrect.setHeight(31 * 5);
  81. ui->gridLayoutWidget->setGeometry(qrect);
  82. }
  83. //
  84. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
  85. ui->setupUi(this);
  86. m_mainWindow = this;
  87. construct_reg_table();
  88. connect(this, SIGNAL(append_log_signal(QString)), this, SLOT(append_log_slot(QString)));
  89. qInstallMessageHandler(log_output);
  90. m_thread.reset(new ZQThread("test", [this]() { mainWindowsRun(); }));
  91. m_thread->start();
  92. // m_xsync.reset(new Xsync());
  93. Xsync::Ins().initialize(XSyncUdpFactoryImpl::Ins());
  94. }
  95. MainWindow::~MainWindow() { delete ui; }
  96. #define XS_ASSERT(exptr) \
  97. { \
  98. auto ecode = exptr; \
  99. while (!(ecode == kxs_ec_success)) { \
  100. ZLOGE(TAG, "do: %s fail,ecode:%d", #exptr, ecode); \
  101. ZQThread::sleep(1); \
  102. } \
  103. }
  104. void MainWindow::on_RefreshRegsButton_clicked() { //
  105. ZLOGI(TAG, "on_refreshRegsButton_clicked");
  106. QtConcurrent::run([this]() {
  107. while (true) {
  108. ZLOGI(TAG, "on_refreshRegsButton_clicked......");
  109. auto ecode = Xsync::Ins().reg_write(0xABCDDCBA, 0x12345678);
  110. ZLOGI(TAG, "reg_read ecode:%s", xs_error_code_2_str(ecode));
  111. }
  112. });
  113. // xs_error_code_t ecode = Xsync::Ins().reg_write(0xABCDDCBA, 0x12345678);
  114. // ZLOGI(TAG, "reg_write ecode:%s", xs_error_code_2_str(ecode));
  115. }
  116. void MainWindow::on_ClearLogButton_clicked() { //
  117. ui->logbrowser->clear();
  118. }
  119. void MainWindow::on_Connect2XsyncButton_clicked() { //
  120. ZLOGI(TAG, "connect %s", ui->IpInput->text().toStdString().c_str());
  121. xs_error_code_t ecode = Xsync::Ins().connect(ui->IpInput->text().toStdString());
  122. ZLOGI(TAG, "connect %s ecode:%s", ui->IpInput->text().toStdString().c_str(), xs_error_code_2_str(ecode));
  123. }
  124. void MainWindow::mainWindowsRun() { //
  125. XSyncUdpFactoryImpl::Ins()->initialize();
  126. auto xsudp = XSyncUdpFactoryImpl::Ins()->createXSUDP();
  127. XS_ASSERT(xsudp->initialize("0.0.0.0", 9999));
  128. xsudp->startReceive([this, xsudp](XsyncNetAdd &from, uint8_t *data, size_t length) {
  129. // ZLOGI(TAG, "receive from <%s:%d> (%d) :%s", from.ip.c_str(), from.port, data, length);
  130. xsudp->sendto(from, "hello\n", 5, NULL);
  131. });
  132. }