diff --git a/libxsync b/libxsync index 8433478..5a720b8 160000 --- a/libxsync +++ b/libxsync @@ -1 +1 @@ -Subproject commit 8433478652974055656b7f257047f654077bc5f8 +Subproject commit 5a720b8a84ea7f5aa7fdd269ffb125ef29fdbfad diff --git a/mainwindow.cpp b/mainwindow.cpp index ec9ee69..ab6cca7 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -11,6 +11,34 @@ using namespace std; static MainWindow *m_mainWindow; #define TAG "MainWindow" +static const char *fmt(const char *fmt, ...) { + va_list args; + va_start(args, fmt); + static char buf[1024] = {0}; + vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + return buf; +} + +static const uint32_t str2int(QString str) { + // 如果0x开头,按16进制转换 + // 如果0b开头,按2进制转换 + // 否则按10进制转换 + + // 去除掉str中_ + str.remove("_"); + + if (str.startsWith("0x")) { + return str.toUInt(nullptr, 16); + } else if (str.startsWith("0b")) { + // remove 0b + str.remove(0, 2); + return str.toUInt(nullptr, 2); + } else { + return str.toUInt(nullptr, 10); + } +} + void MainWindow::log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QString text; text.append(msg); @@ -24,7 +52,7 @@ void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t { auto *label = new QLabel(parent); label->setObjectName(QString::fromUtf8("label")); - label->setText(QString(regname)); + label->setText(QString(fmt("%s(0x%04x)", regname, regadd))); QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::Expanding); sizePolicy1.setHorizontalStretch(0); sizePolicy1.setVerticalStretch(0); @@ -78,6 +106,24 @@ void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t sizePolicy.setHeightForWidth(button->sizePolicy().hasHeightForWidth()); button->setSizePolicy(sizePolicy); + // connect(this, + connect(button, &QPushButton::clicked, [this, regadd](bool) { // + QString regval_str = m_regdisplayer[regadd]->regEditer->toPlainText(); + uint32_t regval = str2int(regval_str); + ZLOGI(TAG, "write reg 0x%04x %d", regadd, regval); + + uint32_t readbackval = 0; + auto ecode = Xsync::Ins().reg_write(regadd, regval, readbackval); + if (ecode == kxs_ec_success) { + ZLOGI(TAG, "write reg 0x%04x %d success", regadd, regval); + m_regdisplayer[regadd]->regvalcache = regval; + m_regdisplayer[regadd]->regBrowser->setText(QString::number(regval, 16)); + } else { + ZLOGE(TAG, "write reg 0x%04x %d fail,ecode:%s", regadd, regval, xs_error_code_2_str(ecode)); + } + + }); + regitem->writerButton = button; ui->reg_table->addWidget(button, off, 3, 1, 1); } @@ -85,13 +131,16 @@ void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t } void MainWindow::construct_reg_table() { // - push_reg(ui->gridLayoutWidget, 1, "reg0", 0x1000, 0); - push_reg(ui->gridLayoutWidget, 2, "reg1", 0x1001, 0); - push_reg(ui->gridLayoutWidget, 3, "reg1", 0x1002, 0); - push_reg(ui->gridLayoutWidget, 4, "reg1", 0x1003, 0); - push_reg(ui->gridLayoutWidget, 5, "reg1", 0x1004, 0); + int regoff = 1; + push_reg(ui->gridLayoutWidget, regoff++, "reg1", 0x1000, 0); + push_reg(ui->gridLayoutWidget, regoff++, "reg1", 0x1001, 0); + push_reg(ui->gridLayoutWidget, regoff++, "reg1", 0x1002, 0); + push_reg(ui->gridLayoutWidget, regoff++, "reg1", 0x1003, 0); + push_reg(ui->gridLayoutWidget, regoff++, "reg1", 0x1004, 0); + + // 设置table的高度 auto qrect = ui->gridLayoutWidget->geometry(); - qrect.setHeight(31 * 5); + qrect.setHeight(31 * regoff - 1); ui->gridLayoutWidget->setGeometry(qrect); } // @@ -124,10 +173,25 @@ void MainWindow::on_RefreshRegsButton_clicked() { // ZLOGI(TAG, "on_refreshRegsButton_clicked"); QtConcurrent::run([this]() { - while (true) { - ZLOGI(TAG, "on_refreshRegsButton_clicked......"); - auto ecode = Xsync::Ins().reg_write(0xABCDDCBA, 0x12345678); - ZLOGI(TAG, "reg_read ecode:%s", xs_error_code_2_str(ecode)); + bool suc = true; + for (auto ® : m_regdisplayer) { + uint32_t regValue = 0; + auto ecode = Xsync::Ins().reg_read(reg.first, regValue); + if (ecode == kxs_ec_success) { + ZLOGI(TAG, "reg_read %x success", reg.first); + reg.second->regvalcache = regValue; + reg.second->regBrowser->setText(QString::number(regValue, 16)); + } else { + ZLOGE(TAG, "reg_read %x fail,ecode:%s", reg.first, xs_error_code_2_str(ecode)); + suc = false; + break; + } + } + + if (suc) { + ZLOGI(TAG, "readreg end..."); + } else { + ZLOGI(TAG, "readreg error"); } }); @@ -144,11 +208,10 @@ void MainWindow::on_Connect2XsyncButton_clicked() { // } void MainWindow::mainWindowsRun() { // XSyncUdpFactoryImpl::Ins()->initialize(); - - auto xsudp = XSyncUdpFactoryImpl::Ins()->createXSUDP(); - XS_ASSERT(xsudp->initialize("0.0.0.0", 9999)); - xsudp->startReceive([this, xsudp](XsyncNetAdd &from, uint8_t *data, size_t length) { - // ZLOGI(TAG, "receive from <%s:%d> (%d) :%s", from.ip.c_str(), from.port, data, length); - xsudp->sendto(from, "hello\n", 5, NULL); - }); + // auto xsudp = XSyncUdpFactoryImpl::Ins()->createXSUDP(); + // XS_ASSERT(xsudp->initialize("0.0.0.0", 9999)); + // xsudp->startReceive([this, xsudp](XsyncNetAdd &from, uint8_t *data, size_t length) { + // // ZLOGI(TAG, "receive from <%s:%d> (%d) :%s", from.ip.c_str(), from.port, data, length); + // xsudp->sendto(from, "hello\n", 5, NULL); + // }); } diff --git a/mainwindow.h b/mainwindow.h index 4e6edd5..2cb48a6 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -45,6 +45,7 @@ class DispalyRegIterm { QTextBrowser *regBrowser = 0; QTextEdit *regEditer = 0; QPushButton *writerButton = 0; + uint32_t regvalcache; }; class MainWindow : public QMainWindow {