|
|
@ -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);
|
|
|
|
// });
|
|
|
|
} |